這是不是乙個C 編譯器的bug

時間 2021-06-02 03:52:21

1樓:Ubp.a

這是空基類問題。

為什麼要寫成這種基類 Vec 的形式?想必題主也清楚,就是「復用函式實現」,而不僅僅是 concept。

這裡題主復用了乙個函式實現,是

operator

很好現在想復用另一種函式實現,加法得寫成怎樣呢?如下

template

Impl

,typenameT,

size_t

N>struct

VecAdd

}該怎麼復用到 Vec4 呢?

template

T>struct

Vec4

:VecAdd

,N>,Vec

但這樣是錯誤的,源於空基類問題。

怎麼解決?

Ubp.a:C++ | 單繼承化

另外用了這個設計思路「復用函式實現」寫的一套圖形數學庫Ubp.a:開源!C++ 圖形數學庫 UGM

2樓:

不是。你的 Vec4 第乙個成員型別( Vec3 )由於繼承關係,和 Vec4 的基類 Vec 可以有相同的位址。這種情況下無法進行空基類優化。

所以你讓 Vec3 不繼承 Vec ,可以解決型別相同的問題,實現空基類優化;讓 Vec4 不繼承 Vec ,就沒有基類的 1 位元組佔位了。

我們為什麼不能開發乙個漢語的編譯器,類似C ,java?

yyf 首先,說下我是個剛開始學習的小白 大神給些同情 我也不是標準的程式設計師,我只是萬千人中最平常的那乙個。有人說沒有必要,因為別人的成果已經很好了,我們再來開發不是浪費時間麼!但是,我想說的是,作為底層的一些東西還是自己的好。用漢語做語法,最起碼中中國人會感到親近,沒有看著就頭大的感覺,而且,...

為一個新的CPU架構實現C編譯器怎樣最簡單?

LLVM文件很齊啊,沒你說的那麼誇張吧?編譯原理還想手把手地學?http www.llvm.org docs WritingAnLLVMBackend.html http jonathan2251.github.io lbd llvmstructure.html延伸閱讀 http sourcewar...

世界上存在 與規範完全一致 的 C 編譯器 直譯器嗎?

在沒有形式化規範的前提下,是沒法嚴格的判斷乙個編譯器實現的語言是否滿足語言的規範,最多只能通過不斷的測試做近似判斷。有了形式化規範,才有可能通過形式化方法構造和證明乙個滿足規範的編譯器,例如 compcert。但是即使是compcert這樣只實現了乙個 c 的子集的編譯器,證明其滿足規範也不是一件容...