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