如何去理解C 中的type rich programming

時間 2021-06-08 12:52:40

1樓:劉項

編譯期判斷型別的繼承關係: md-blog/cpp/is_derived_from/is_derived_from.md at master · lexdene/md-blog · GitHub

編譯期斷言: md-blog/cpp/compile_time_assert/compile_time_assert.md at master · lexdene/md-blog · GitHub

而且事實上,如果能夠靈活使用編譯期的一些技術,不但可以利用編譯在執行前做很多檢查工作,而且可以大大增強程式語言的表達能力。

比如《設計模式》中介紹過一種叫抽象工廠的模式,它需要N個型別以「生產」N個不同的產品。

那麼可以利用模板等技術實現乙個叫TypeList的模板類,它能夠表達N個型別組成的列表。並且可以在編譯期計算它的長度,取列表中的第i個型別。在編譯期計算哦~根本不占用執行期的時間。

推薦一本書,叫《Modern C++ Design》,介紹了模板、型別推導的強大,其中就包括了TypeList的實現方法。

如何理解C 中的 reinterpret cast?

LoveCandy 顧名思義,就是把記憶體裡的值重新解釋。本質上記憶體裡存的都是01位串,至於這些位串是什麼意思全看怎麼解釋。舉個例子,32位系統,int是32位,指標也是32位,我既可以把乙個32位的值解釋成乙個整數,也可以解釋成乙個指標。至於究竟能不能這樣解釋,由程式設計師負責。而reinter...

如何理解C 中的move語義?

zr scat 上面有人已經解釋的很清楚了,我這裡補充說明一下 1,move語義必須和RAll結合起來才能安全使用,因為move涉及到堆記憶體的管理權的轉移,如果不RAll,多轉移幾次,你完全都不知道指標現在歸誰管理了。2,move語義轉移的move建構函式中指定的堆空間使用權,而不是物件,也就是說...

如何理解C 中的關鍵字static, const, 以及 define在定義變數時的區別?

他們沒有聯絡只有區別 不同層面上的東西。define 預處理層面上的替換,不存在於語意層面static 變數的作用域控制 const 變數的訪問控制 唯讀 wuxinliulei C C 裡面的static 面向過程的static 在c和c 面向過程的設計裡,在全域性變數前加上static關鍵字則可...