亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

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

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

#define ASPECT_RATIO 1.653

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

const double ASPECT_RATIO = 1.653;


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

首先,定義指針常量時(shí)會(huì)有點(diǎn)不同。因?yàn)槌A慷x一般是放在頭文件中(許多源文件會(huì)包含它),除了指針?biāo)傅念愋鸵x成const外,重要的是指針也經(jīng)常要定義成const。例如,要在頭文件中定義一個(gè)基于char*的字符串常量,你要寫兩次const:


const char * const authorName = "Scott Meyers";

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

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

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


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


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


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


舊一點(diǎn)的編譯器會(huì)不接受這種語法,因?yàn)樗J(rèn)為類的靜態(tài)成員在聲明時(shí)定義初始值是非法的;而且,類內(nèi)只允許初始化整數(shù)類型(如:int, bool, char 等),還只能是常量。
在上面的語法不能使用的情況下,可以在定義時(shí)賦初值:
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ù)情況下你只要做這么多。唯一例外的是當(dāng)你的類在編譯時(shí)需要用到這個(gè)類的常量的情況,例如上面GamePlayer::scores數(shù)組的聲明(編譯過程中編譯器一定要知道數(shù)組的大小)。所以,為了彌補(bǔ)那些(不正確地)禁止類內(nèi)進(jìn)行整型類常量初始化的編譯器的不足,可以采用稱之為“借用enum”的方法來解決。這種技術(shù)很好地利用了當(dāng)需要int類型時(shí)可以使用枚舉類型的原則,所以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。當(dāng)然,知道有這種方法還是值得的,因?yàn)檫@種可以追溯到很久以前的時(shí)代的代碼可是不常見的喲。


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


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


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


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


這個(gè)模板產(chǎn)生了一整套函數(shù),每個(gè)函數(shù)拿兩個(gè)可以轉(zhuǎn)換成同種類型的對(duì)象進(jìn)行比較然后返回較大的(常量)對(duì)象的引用。因?yàn)椴恢繲的類型,返回時(shí)傳遞引用可以提高效率(見條款22)。


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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

日韩区一区二| 日韩视频免费| 人妻少妇无码精品视频区| 亚洲一区成人在线| 国内偷自视频区视频综合| 成人中文字幕在线观看| 欧美成人高清在线| 日韩理论片网站| 中文字幕国产传媒| 超碰在线免费看| 日韩精品免费在线视频| 羞羞污视频在线观看| 视频小说一区二区| 免费在线视频一区二区| 中文字幕日韩一区二区三区| 香蕉久久夜色精品国产更新时间| 午夜剧场高清版免费观看| 国产精品日日摸夜夜添夜夜av| 日韩欧美一区二区三区四区五区| 国产精品免费视频网站| 黑人巨大xxx| 在线观看日韩片| 日韩免费影院| 欧美日韩一区二区三区电影| 九色在线视频观看| 真实国产乱子伦对白视频| 巨大荫蒂视频欧美另类大| 成人午夜大片免费观看| 另类free性欧美护士| 你懂得在线观看| 九九热免费在线观看| 免费人成精品欧美精品| 久久99精品久久久久久水蜜桃| 日本在线成人一区二区| 九色国产蝌蚪| 国产欧美久久久精品影院| 久久99精品国产91久久来源| 四虎成人精品永久免费av九九| 99在线精品免费视频| 欧美videossex| 91超碰中文字幕久久精品| 少妇无码一区二区三区| 日韩福利影视| 在线一区二区三区做爰视频网站| 99精品国产99久久久久久白柏| 欧美综合精品| 无码人妻精品一区二区三区蜜桃91| 久久久久国产一区| 国产又粗又大又长| 国产青春久久久国产毛片| 国产亚洲一本大道中文在线| 99久久精品一区二区三区| 四虎成人免费影院| 日韩欧美中文免费| 豆国产96在线|亚洲| 久草在线资源站手机版| 狠狠色丁香久久婷婷综合丁香| 麻豆精品在线播放| 日韩中文在线播放| 在线观看国产福利视频| 啪啪av大全导航福利网址| 欧美老女人性生活视频| 亚洲丝袜另类动漫二区| 亚洲一区二区三区四区| 天堂av免费在线| 尤物视频免费在线观看| 毛片av免费在线观看| 欧美精品videossex少妇| 亚洲精品国产美女| 亚洲精品久久久久久久久久久久久久| 国产午夜精品全部视频在线播放| 久草在线新免费首页资源站| 视频二区欧美毛片免费观看| 欧美日韩一区二区三区在线电影| 国产一区二区伦理| 欧美激情一级欧美精品| 四虎影视永久免费观看| 韩国三级午夜理伦三级三| 免费黄色小视频| 亚洲av无码国产精品永久一区| 麻豆精品视频在线原创| 国产精品成人播放| 久久国产精品区| 久久久久久久久久久黄色| 欧美精品久久久久久久久久丰满| 成人婷婷网色偷偷亚洲男人的天堂| 亚洲第一页在线观看| 91丨porny丨最新| 亚洲最大成人综合网| 国产寡妇树林野战在线播放| www日本视频| 国产精选在线观看91| 久久人妻无码aⅴ毛片a片app| 国产精品1区2区3区| 久久av免费一区| 99久久久国产精品免费调教网站| 成人蜜桃视频| 国产系列在线观看| 亚洲精品写真福利| 一本色道久久综合狠狠躁篇的优点| 日韩大尺度在线观看| 8x拔播拔播x8国产精品| 国产免费av观看| 欧洲猛交xxxx乱大交3| 99久久久久成人国产免费| 亚洲美女喷白浆| 欧美午夜a级限制福利片| 久久视频中文字幕| 国产精品99无码一区二区| 天天影视色香欲综合网天天录日日录| 久久不卡国产精品一区二区| 澳门av一区二区三区| 亚洲欧美日韩免费| 亚洲黄色中文字幕| av高清资源| 中文字幕视频网站| 国产精品二区视频| 91社区在线观看播放| 亚洲色图视频网站| 中文字幕乱码一区二区免费| 天堂va欧美va亚洲va老司机| 午夜精品久久久久影视| 亚洲亚裔videos黑人hd| 中文字幕国产一区二区| 久久久91精品国产一区不卡| 精品小视频在线| 日韩精品一区二区在线播放| 神马影院一区二区三区| 日韩成人精品在线观看| 国产精品一区二区无码对白| 可以免费观看的毛片| 欧美变态tickling挠脚心| 欧洲在线视频一区| 欧美综合一区| 91aaa在线观看| 日韩视频精品在线| 国产女主播视频一区二区| 色综合久久六月婷婷中文字幕| 久草网在线观看| 色哟哟精品视频| 亚洲一区欧美| 图片一区二区| kk眼镜猥琐国模调教系列一区二区| 欧美偷拍一区二区三区| 国产一区二区三区四区五区美女| 国产精品一二三四五区| 在线观看日韩| 99国产精品白浆在线观看免费| 国语对白在线视频| 18av在线播放| 欧美巨胸大乳hitomi| 欧美精品在线一区二区| 国产偷倩在线播放| 久久人人爽人人爽人人片亚洲| 午夜天堂精品久久久久| 精品孕妇一区二区三区| 黑人精品一区| 亚洲石原莉奈一区二区在线观看| 日韩av在线播放不卡| 中文字幕制服丝袜成人av| 色婷婷激情五月| wwwww在线观看免费视频| 久久人妻免费视频| 成人黄色av网站在线| 在线小视频你懂的| 亚洲精品乱码久久久久久蜜桃动漫| 亚洲国产精品v| 国产大尺度在线观看| 久久av资源网| 天堂在线一区二区三区| 日韩免费观看网站| 亚洲经典三级| 好男人www社区在线视频夜恋| 国产av无码专区亚洲精品| 亚洲国产毛片完整版| 成人在线激情网| 日韩欧美大片在线观看| 国产精品久久久久久久免费观看| 香蕉伊大人中文在线观看| 国产a级片免费看| 日本韩国欧美一区二区三区| 日本女优一区| 亚洲精品自拍网| 岛国在线最新| 亚洲美女视频在线观看| 日韩在线观看视频一区二区| 日韩专区中文字幕一区二区| 一级毛片aaaaaa免费看| 特黄毛片在线观看| 4438全国亚洲精品观看视频| 国产综合色香蕉精品| 九色蝌蚪性视频| 在线观看中文字幕一区| 国产一区二区三区黄网站| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 色综合伊人色综合网| 中文在线资源观看视频网站免费不卡| 日本福利一区二区三区| 国产高潮呻吟久久久| 亚洲图片欧美在线| 亚色视频在线观看| avtt天堂资源网站| 国产午夜精品一区二区三区视频| 成人1区2区3区| 国产伦久视频在线观看| 99久久精品免费观看| 91久久久免费一区二区| 最新国产精品久久精品| 日本国产一区| 日本熟妇乱子伦xxxx| 成人欧美一区二区三区1314| 欧美成在线观看| 国内视频自拍在线视频| 超碰97久久国产精品牛牛| 国产精品久久7| 懂色av中文字幕| 九九久久久久99精品| 日韩欧美中文在线观看| 日韩一二三四区| 国产亚洲日本欧美韩国| 日本一欧美一欧美一亚洲视频| 久久久欧美精品| 欧美一级黄色录像| 先锋影音中文字幕| 99国产精品99久久久久久| 日日夜夜精品免费视频| 婷婷在线播放| 欧美女同一区| 一区二区三区视频免费观看| 欧美性少妇18aaaa视频| 国产精品偷伦免费视频观看的| 国产乱在线观看完整版视频| 国产一区二区在线|播放| 中文字幕av一区二区三区人妻少妇| 2023国产一二三区日本精品2022| 久久久精品有限公司| 成人资源在线| 欧美日韩成人综合天天影院| 亚州精品永久观看视频| av天堂一区二区| 天天添天天操| 一区二区三区四区毛片| 91情侣偷在线精品国产| 影音先锋成人资源网站| 亚洲无亚洲人成网站77777| 91精品国产高清久久久久久91| 稀缺小u女呦精品呦| 黄色国产小视频| 亚洲最大福利视频网| 欧美 日韩 国产 成人 在线观看| 亚洲男人天堂av在线| 丝袜情趣国产精品| 国产一区在线不卡| 免费久久99精品国产| 给我免费播放日韩视频| 91嫩草香蕉| 日本大片在线播放| 性欧美极品xxxx欧美一区二区| 欧美国产一区视频在线观看| 9l视频自拍九色9l视频成人| 黄色激情网址| 美女国产一区| 91亚洲精品丁香在线观看| 性欧美丰满熟妇xxxx性仙踪林| 国产精品久久久久久人| 国产又黄又粗的视频| 亚洲欧美成人影院| 制服丝袜在线91| av在线免费一区| 九九九九热精品免费视频| 7777精品伊人久久久大香线蕉最新版| 欧洲亚洲免费在线| 无码粉嫩虎白一线天在线观看| 自拍亚洲一区欧美另类| 手机在线观看国产精品| 日日夜夜免费精品视频| 中文字幕第一页在线视频| 一级黄色大片免费| 国内av一区二区| 国产亚洲欧美日韩在线观看一区二区| 国产 欧美 日韩 一区| 午夜精品久久久| 一级片免费网站| 欧美韩日精品| 情趣视频在线观看| 欧美国产精品专区| 色视频免费版高清在线观看| 99成人在线视频| 中文字幕在线观看免费高清| 国产激情一区二区三区在线观看| 在线观看三级视频欧美| 国产一级二级在线观看| 亚洲午夜91| 国产乱码精品一区二区三区五月婷| 成人婷婷网色偷偷亚洲男人的天堂| 丝袜一区二区三区| 欧美系列一区二区| 免费网站成人| 性久久久久久| 亚洲 激情 在线| 国产乱码在线| 精品1区2区3区4区| 91在线视频观看| 自拍偷自拍亚洲精品被多人伦好爽| 不卡的av影片| 韩国一区二区三区视频| 粉嫩精品一区二区三区在线观看| 亚洲色图偷拍自拍| 一区二区三区四区视频在线观看| 久久国产精品99久久人人澡| 中文字幕在线观看第二页| 国产传媒第一页| 人人在草线视频在线观看| 国产精品久久久久久久久免费相片| 伊是香蕉大人久久| 国产成人亚洲综合小说区| 超碰在线播放97| 国产精品欧美性爱| 日韩av免费在线看| 性一交一乱一色一免费无遮挡| 国产欧美综合在线| 国产精品香蕉| 国产一区二区免费看| 99porn视频在线| 久久成人国产| 中文字幕日日夜夜| 97色在线观看免费视频| 欧美一区二区三区精美影视|