Effective C++ iterm2

條款二c++

--17/01/15編程

(1)寧肯以編譯器替換預編譯器。ide

(2)#define x 10這條語句會預編譯器將x翻譯爲10,因此預編譯出來的代碼會多出不少個10。由此看來,define出來的常量不會進入編譯器的記號表內,這將給調試帶來不少麻煩?函數

(3)在c++定義常量最好使用const,這裏做者講了兩種特殊狀況:idea

1.定義常量指針時,關於指針常量和常量指針,能夠參考這篇:spa

http://goodidea.blog.51cto.com/639065/126526翻譯

簡單說一下:指針

指針常量就是這個指針是個常量,不能改變這個指針指向的地址;調試

常量指針就是指針指向的內容是常量,不能改變這個指針指向的內容,能夠改變這個指針指向的內存地址。blog

 

2.定義常量的做用域時,咱們有時候須要將此常量做爲class的專屬常量,這裏將此常量做爲類的私有靜態常量便可,而define是作不到這點的。

(4)利用enum hack定義整數常量,enum{ numTurns = 5; }這樣就像define同樣致使沒必要要的內存,這個和const的區別在於enum的寫法獲取不了這個常量的指針或者引用,這也是define能夠作到的。另外還有一點便是這是在模板元編程會用到的基本技術。

(5)利用template inline函數來代替宏定義的函數,這樣能夠避免參數被調用屢次可能,而且和函數同樣遵照做用域和訪問規則。這個也是define作不到的。

相關文章
相關標籤/搜索