關(guān)于做旅游網(wǎng)站的參考文獻(xiàn)營銷策劃書
1、盡量用const enum inline替換#define
因?yàn)?define是做預(yù)處理操作,編譯器從未看見該常量,編譯器剛開始編譯,它就被預(yù)處理器移走了,而#define的本質(zhì)就是做替換,它可能從來未進(jìn)入記號(hào)表
解決方法是用常量替換宏
語言常量會(huì)被編譯器看到,會(huì)進(jìn)入記號(hào)表內(nèi)
#define不注重域的范圍,而const可以,#define不能定義類常量,也不能提供封裝性,比如private等
用#define定義“函數(shù)”問題會(huì)非常大
int a = 5, b = 0;
#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))
如果調(diào)用CALL_WITH_MAX(++a, b); //a會(huì)累計(jì)加兩次,(++a) > (b) ? (++a) : (b);
因?yàn)?#43;+a > b,所以使用++a的值(三目運(yùn)算符)
如果調(diào)用CALL_WITH_MAX(++a, b + 10);就會(huì)累計(jì)加一次,因?yàn)閍 < b了,所以取值b,之加了一次
在迭代器中,若迭代器不做值修改那么可以用const_iterator,以此提高性能
例如:
const std::vector<int>::iterator iter = vec.begin();//iter的作用類似于T* const
*iter = 10;//正確
++iter;//錯(cuò)誤
std::vector<int>::const_iterator citer = vec.begin();//iter的作用類似于const T*
*citer = 10;//錯(cuò)誤
++citer;//正確
const加在返回值身上:
const Rational operator* (const Rational& lhs, const Rational& rhs);
如果不加,那么我可以寫成:Rational a, b, c;
(a * b) = c;//而a*b返回的是一個(gè)右值
?
?