日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > C > 正文

C語言編程技巧 關(guān)于const和#define的區(qū)別心得

2020-01-26 16:21:57
字體:
供稿:網(wǎng)友

#define ASPECT_RATIO 1.653

編譯器會永遠也看不到ASPECT_RATIO這個符號名,因為在源碼進入編譯器之前,它會被預(yù)處理程序去掉,于是ASPECT_RATIO不會加入到符號列表中。如果涉及到這個常量的代碼在編譯時報錯,就會很令人費解,因為報錯信息指的是1.653,而不是ASPECT_RATIO。如果ASPECT_RATIO不是在你自己寫的頭文件中定義的,你就會奇怪1.653是從哪里來的,甚至?xí)〞r間跟蹤下去。這個問題也會出現(xiàn)在符號調(diào)試器中,因為同樣地,你所寫的符號名不會出現(xiàn)在符號列表中。
解決這個問題的方案很簡單:不用預(yù)處理宏,定義一個常量: 

const double ASPECT_RATIO = 1.653;


這種方法很有效。但有兩個特殊情況要注意。

首先,定義指針常量時會有點不同。因為常量定義一般是放在頭文件中(許多源文件會包含它),除了指針所指的類型要定義成const外,重要的是指針也經(jīng)常要定義成const。例如,要在頭文件中定義一個基于char*的字符串常量,你要寫兩次const:


const char * const authorName = "Scott Meyers";

關(guān)于const的含義和用法,特別是和指針相關(guān)聯(lián)的問題,參見條款21。 

另外,定義某個類(class)的常量一般也很方便,只有一點點不同。要把常量限制在類中,首先要使它成為類的成員;為了保證常量最多只有一份拷貝,還要把它定義為靜態(tài)成員:      

class GamePlayer {
private:
static const int NUM_TURNS = 5; // constant eclaration 
int scores[NUM_TURNS]; // use of constant
...
};


還有一點,正如你看到的,上面的語句是NUM_TURNS的聲明,而不是定義,所以你還必須在類的實現(xiàn)代碼文件中定義類的靜態(tài)成員:


const int GamePlayer::NUM_TURNS; // mandatory definition;
// goes in class impl.file


你不必過于擔(dān)心這種小事。如果你忘了定義,鏈接器會提醒你。


舊一點的編譯器會不接受這種語法,因為它認為類的靜態(tài)成員在聲明時定義初始值是非法的;而且,類內(nèi)只允許初始化整數(shù)類型(如:int, bool, char 等),還只能是常量。
在上面的語法不能使用的情況下,可以在定義時賦初值:
class EngineeringConstants { // this goes in the class
private: // header file
static const double FUDGE_FACTOR;
...
};
// this goes in the class implementation file
const double EngineeringConstants::FUDGE_FACTOR = 1.35;


大多數(shù)情況下你只要做這么多。唯一例外的是當你的類在編譯時需要用到這個類的常量的情況,例如上面GamePlayer::scores數(shù)組的聲明(編譯過程中編譯器一定要知道數(shù)組的大小)。所以,為了彌補那些(不正確地)禁止類內(nèi)進行整型類常量初始化的編譯器的不足,可以采用稱之為“借用enum”的方法來解決。這種技術(shù)很好地利用了當需要int類型時可以使用枚舉類型的原則,所以GamePlayer也可以象這樣來定義:
class GamePlayer {
private:
enum { NUM_TURNS = 5 } // "the enum hack" ― makes
// NUM_TURNS a symbolic name 
// for 5
int scores[NUM_TURNS];// fine
};


除非你正在用老的編譯器(即寫于1995年之前),你不必借用enum。當然,知道有這種方法還是值得的,因為這種可以追溯到很久以前的時代的代碼可是不常見的喲。


回到預(yù)處理的話題上來。另一個普遍的#define指令的用法是用它來實現(xiàn)那些看起來象函數(shù)而又不會導(dǎo)致函數(shù)調(diào)用的宏。典型的例子是計算兩個對象的最大值:
#define max(a,b) ((a) > (b) ? (a) : (b))


這個語句有很多缺陷,光想想都讓人頭疼,甚至比在高峰時間到高速公路去開車還讓人痛苦。
無論什么時候你寫了象這樣的宏,你必須記住在寫宏體時對每個參數(shù)都要加上括號;否則,別人調(diào)用你的宏時如果用了表達式就會造成很大的麻煩。但是即使你象這樣做了,還會有象下面這樣奇怪的事發(fā)生:


int a = 5, b = 0;
max(++a, b);// a 的值增加了2次
max(++a, b+10); // a 的值只增加了1次


這種情況下,max內(nèi)部發(fā)生些什么取決于它比較的是什么值!
幸運的是你不必再忍受這樣愚笨的語句了。你可以用普通函數(shù)實現(xiàn)宏的效率,再加上可預(yù)計的行為和類型安全,這就是內(nèi)聯(lián)函數(shù)(見條款33):
inline int max(int a, int b) { return a > b ? a : b; }
不過這和上面的宏不大一樣,因為這個版本的max只能處理int類型。但模板可以很輕巧地解決這個問題:
template<class T>
inline const T& max(const T& a, const T& b)
{ return a > b ? a : b; }


這個模板產(chǎn)生了一整套函數(shù),每個函數(shù)拿兩個可以轉(zhuǎn)換成同種類型的對象進行比較然后返回較大的(常量)對象的引用。因為不知道T的類型,返回時傳遞引用可以提高效率(見條款22)。


順便說一句,在你打算用模板寫象max這樣有用的通用函數(shù)時,先檢查一下標準庫(見條款49),看看他們是不是已經(jīng)存在。比如說上面說的max,你會驚喜地發(fā)現(xiàn)你可以后人乘涼:max是C++標準庫的一部分。
有了const和inline,你對預(yù)處理的需要減少了,但也不能完全沒有它。拋棄#include的日子還很遠,#ifdef/#ifndef在控制編譯的過程中還扮演重要角色。預(yù)處理還不能退休,但你一定要計劃給它經(jīng)常放長假

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

视频一区二区国产| 免费精品国产自产拍在| 婷婷精品进入| 国产一级网站视频在线| 蜜臀久久精品| 日韩免费看网站| 精品视频—区二区三区免费| 日韩中文欧美在线| 国产成人综合av| av中文网站| 1024国产在线| 国产欧美日韩视频| 亚洲一区日韩精品中文字幕| 日韩一级视频在线观看| 久久精品日韩欧美| 国产一区不卡精品| 国产在线第一页| 日本精品福利视频| 国产一区深夜福利| 在线不卡一区二区| 欧美 日韩 国产 在线| 欧美日韩国产片| 高清一区二区| 一区三区二区视频| 国产久卡久卡久卡久卡视频精品 | 日韩欧美综合在线| wwwwww在线观看| 日韩在线高清视频| 91精品在线视频观看| 国产高潮久久久| 亚洲美女视频一区| 中文字幕亚洲一区二区av在线| 91精品久久久久久蜜臀| 欧美日韩国产高清一区| 欧美日韩在线中文字幕| 国产91久久久久蜜臀青青天草二| 最近中文av字幕在线中文| 国产网站av| 久久久精品福利| 国产成人日日夜夜| 国产日韩免费| 日韩精品午夜| 日韩精品视频在线观看视频| av手机天堂| 欧美日韩中文在线| 精品国产乱码久久久久久蜜臀| 91精品国产综合久久久蜜臀粉嫩| 成人ww免费完整版在线观看| 中文在线中文字幕| 国产三级视频网站| 亚洲女人天堂色在线7777| 天天摸日日摸狠狠添| 欧美日韩综合视频| 中文字幕视频在线观看| av中文网站| 国产一卡2卡3卡免费网站| 福利在线国产| 国产不卡精品在线| 久久99久久久久久久噜噜| 中文字幕日韩免费视频| 精品久久人人做人人爽| 国产日产一区二区三区| 欧美日韩视频免费播放| 91日韩欧美| 日韩精品资源二区在线| 日韩在线视频网| 一区二区三区精品99久久| 国产三级做爰在线观看| 日韩欧美在线网址| 日韩视频精品| 91精品国产调教在线观看| 精品国产欧美日韩不卡在线观看| 久久夜色精品国产欧美乱极品| 亚洲免费视频一区| 99在线国产| 日韩精品不卡一区二区| 欧美国产三级| 欧美日韩视频免费播放| 国产1卡2卡三卡四卡网站| 中文字幕在线国产| 一区二区在线视频播放| 一区二区三区四区五区视频在线观看| 日韩中文字幕视频网| 欧美日韩精品在线观看| 美女在线视频一区| 久久久精品国产99久久精品芒果| 天堂在线www天堂中文在线| a在线观看免费视频| 91精品国产综合久久香蕉最新版| 人成免费在线视频| 国产日韩专区| 国产乱码在线观看| 中文字幕亚洲一区二区av在线| 午夜高潮免费视频| 美女在线视频一区| 日韩高清不卡一区| 视频一区二区不卡| 欧美日韩精品欧美日韩精品一| 欧美日韩中文字幕在线| 国自产拍在线网站网址视频| 999精品网| 国产成人精品三级| 91精品国产自产在线观看永久∴| 日韩三级视频中文字幕| 国产在线视频不卡| 欧美另类专区| 91精品国产91久久| 91久久精品在线| 精品调教chinesegay| 不卡在线一区二区| 国产99对白在线播放| 国产xxx在线| 亚洲欧美久久久| 国产欧美综合在线| 欧美中日韩在线| 91精品在线看V| www日韩欧美| av亚洲免费| 日韩三级视频在线看| 色综合婷婷久久| 午夜国产视频| 国产在线视频不卡| 日韩在线视频观看| 中文字幕精品一区二| 91久久精品视频| 不卡专区在线| 日韩在线一区二区| 国产福利免费观看| 天堂在线一区二区三区| 国产91大片| 亚洲一区在线观看免费| 日本精品在线| av免费在线观看网址| 久久久久久久久99精品| 精品一二线国产| 国产99在线 | 亚洲| 欧美不卡123| 欧美日韩精品综合| 精品色蜜蜜精品视频在线观看| 欧美日韩国产首页| 一级网站免费观看| 欧美亚洲视频在线看网址| 中文字幕在线观看视频www| 国产永久免费高清在线观看| 极品久久久久久| 欧美中文字幕视频在线观看| 午夜国产欧美理论在线播放| 国产视频97| 欧美日韩国产综合视频在线观看 | 中文字幕欧美日韩在线不卡| 99精品在线播放| 日韩在线二区| 欧美 日韩 国产 在线观看| 中文字幕亚洲第一| 99国内精品| 欧美日韩综合高清一区二区| 中文字幕国产欧美| 亚洲一级二级| 国产日韩在线亚洲字幕中文| 精品久久久久久无| 国产欧美中文在线| 91精品国产高清久久久久久| 日韩欧美中文第一页| 91精品国产手机| 樱花草www在线| 亚洲国产欧美久久| 不卡视频一区二区三区| 欧美日韩国产综合视频在线观看中文 | 亚洲视频一二三四| 一区二区在线观| 日韩免费视频一区二区| 欧美1234区| 中文字幕在线看精品乱码| 91极品视频在线观看| 日韩欧美一级视频| 深夜日韩欧美| 国产午夜在线观看| 日韩精品三级| 欧美日韩国产首页| 欧美亚洲国产免费| 国产黄色小视频| 亚洲福利一区| 国产资源中文字幕| 久久久精品国产99久久精品芒果| 欧美日韩精品在线播放| 香蕉人人精品| www.狠狠| 日韩精品高清不卡| 国产一区成人| 亚洲免费精品| 91精品国产全国免费观看| 三级网站免费观看| 91精品无人成人www| 亚洲免费播放| 国产一级粉嫩xxxx| 国产99在线 | 亚洲| 久精品在线观看| 国产嫩草影院久久久久| 红桃视频亚洲| 免费视频久久| 欧美性极品xxxx做受| 国产乱一区二区| 91精品国产亚洲| 一区二区三区中文字幕在线观看| 国产午夜精品全部视频播放| 香蕉视频亚洲一级| 中文字幕精品一区二| 日韩三级在线播放| 999视频精品| 精品av中文字幕在线毛片| 久久精品国产成人一区二区三区| 免费高清在线一区| 精品亚洲国内自在自线福利| 91精选在线| 亚洲乱码中文字幕综合| 中文字幕欧美在线| 日韩亚洲欧美中文在线| 一区二区三区免费看视频 | 国产日韩1区| 日韩精品视频在线免费观看| 亚洲男女av一区二区| 一区二区高清在线| 久久婷婷国产| 中文字幕在线中文字幕二区| 91精品国产色综合久久久蜜香臀| 亚洲免费视频一区| 久久久91精品| 91精品婷婷国产综合久久| 亚洲成年网站在线观看| 国产一级免费| 日韩欧美一卡二卡| 国产欧美日韩精品高清二区综合区| www 日韩| 国产黄在线观看| 国产v日产∨综合v精品视频| 欧美日韩国产91| 黄色片网站在线| 亚洲一区在线观看免费| 人人做人人澡人人爽欧美| 国产在线观看91| 欧美在线视频第一页| 91麻豆精品国产91久久久使用方法| 国产免费久久| 中文字幕伊人| 国产中文在线观看| 欧美二区在线观看| 日韩欧美在线第一页| 国产激情久久| 日韩精品在线第一页| 日韩国产亚洲欧美| 欧美1234区| 欧美日韩中文字幕在线| 日韩视频在线一区| 一级特黄aaa大片在线观看| 欧美日韩国产黄色| 欧美成人vr18sexvr| 国产亚洲欧美中文| 婷婷久久综合网| 欧美日韩视频不卡| av影视在线看| 91av久久久| 91精品观看| 日韩精品欧美在线| 国产传媒久久久| 成人a在线视频免费观看| 国产福利三区| 日本精品免费观看高清观看| 日韩精品视频免费在线观看| 99精品在线播放| a√免费观看在线网址www| 午夜黄色小视频| www.中文字幕在线| 成人久久在线| 色欧美日韩亚洲| 欧美日韩中文字幕日韩欧美| 日本精品免费观看高清观看| 国产欧美日韩最新| 三级网站免费观看| 婷婷中文字幕一区三区| 91精品国产91| 91精品国产91综合久久蜜臀| 91精品久久久久| 欧美亚洲另类制服自拍| 91久久大香伊蕉在人线| 欧美日韩中文字幕综合视频| 欧美三级免费观看| 国产欧美日韩中文字幕| 欧美1234区| 亚洲男女av一区二区| 精品一区二区在线观看视频| 欧美日韩精品在线观看| av免费观看国产| 国产午夜精品视频| 日韩影院二区| 一级片免费在线播放| 尤物av一区二区| www.日韩免费| 日韩欧美国产一二三区| 97久久精品午夜一区二区| xxxxx性| 中文字幕视频一区二区三区久| 欧美日韩亚洲91| 中文精品在线| 欧美在线视频二区| 欧美国产三级| 欧美日韩国产综合久久 | 在线观看区一区二| 日韩精品在线免费看| 亚洲成av人片一区二区密柚| av免费在线播放| 国产福利久久久| 大香一本蕉伊线亚洲网| av中文天堂在线| 99综合视频| 日韩欧美视频一区二区三区四区| 黄色在线播放网站| 国产欧美日韩亚州综合| 九一久久久久久| 精品一二线国产| 国产99精品| 日韩中文字幕视频在线| 一本大道一区二区三区| 欧美 中文字幕| 日韩欧中文字幕| 免费网站看黄yyy222| 91精品国产自产91精品| 天天综合天天| 亚洲a级在线播放观看| 日本a口亚洲| 粉嫩粉嫩芽的虎白女18在线视频| 91xxx在线观看| 精品在线91| 国产主播中文字幕| 午夜视频在线观看一区| 久久91精品国产91久久小草| 国产资源在线观看| 精品国产免费视频| 国产一级久久久| 亚洲 国产 欧美 日韩| 久久精品日韩无码| 国产在线精品日韩| 久久久精品午夜少妇| 精品国产网站在线观看| 99在线精品视频免费观看20| 午夜精品一区二区三区免费视频| 91国内在线| 日韩视频国产视频| 日韩精品一二三四区| wwwav在线播放| 亚洲最新永久观看在线| 91精品综合久久| 国产高清精品二区| 精品久久久久久综合日本欧美 | 日韩高清在线一区二区| 欧美日韩国产观看视频| 欧美日韩性视频一区二区三区| 国产成人精品网址| 欧美日韩在线视频免费观看 | 欧美乱大交xxxxx免费| 久久久精品免费免费| 欧美日韩激情一区| 日韩中文字幕国产| 欧美三级在线看| 精品欧美久久久| 日韩中文首页| 久久久精品日韩| 久久精品在线免费观看| 日韩高清不卡| 国产伦精品免费视频| 69堂精品视频在线播放| 91精品无人成人www| 久久婷婷中文字幕| 久久综合久久综合九色| 精品乱人伦一区二区三区| 精品日韩一区二区三区免费视频| 99精品电影| 国产日韩中文字幕在线| 亚洲欧美日本国产专区一区| 日韩欧中文字幕| 国产乱国产乱300精品| 精品亚洲综合| 久久99久久久欧美国产| 欧美xxxx中国| 亚洲大片精品永久免费| 精品免费久久久| 91精品国产自产在线观看永久∴| 国产欧美综合视频| 国产美女主播视频一区| 国产在线第一页| 日韩在线精品视频| 中文字幕欧美在线| 中文字幕在线导航| av丝袜在线| 欧美日韩中文字幕在线| 日韩欧美在线视频| 在线免费91| 日韩在线中文| 中文字幕4区| 亚州黄色一级| 一区二区视频免费看|