盡量不用#define這條語句,這條語句不認為是C++語言的一部分,而且在進行字符替換時會帶來很多的問題。
原計劃用define定義的普通常量 ,可以換成const定義的常量,如:const double ASPECT_RATIO = 1.653;
但是想用一個const常量定義原define宏定義的指針常量時,除了指針所指的類型要定義成const外,重要的是指針也經常要定義成const。例如,要在頭文件中定義一個基于char*的字符串常量,你要寫兩次const:
const char * const authorName = "Scott Meyers";
此語句意思是指針地址和指針指向的變量內容都是不允許修改的。
定義在類內的const常量只能在類構造函數的初始化成員列表中初始化,不能在類體內賦值初始化,除非你定義的const常量是static 修飾的int型。例如: 類體內 這個語句const int NUM_TURNS=5 編譯器會報錯“only static const integral data members can be initialized within a class”,但是static const int NUM_TURNS=5 就是合法的。出了int其他的static const數據類型,在類體內只能聲明,而不能賦值。這種常量賦值的地方應該在類的實現文件的函數體外,最好在構造函數的前面賦值 例如 const float NUM_TURNS=3.0;放在類的構造函數前面。如果你非得在類體內對一個非static的const int常量賦值,那么可以把該常量定義為enum ,例如在類體內:作如下聲明是合法的:
enum { NUM_TURNS = 5 }
int [NUM_TURNS];
對于define定義的類似函數的宏,最好用內聯函數替代,內聯函數為前置inline 的函數聲明和定義在一起的短小函數。內聯函數提供類型檢查,同樣免除了若干系統調用的過程,得到較高的效率!