青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-250  評(píng)論-20  文章-55  trackbacks-0
 

一 const基礎(chǔ)

如果const關(guān)鍵字不涉及到指針,我們很好理解,下面是涉及到指針的情況:

int b = 500;
const int* a = &b; [1]
int const *a = &b; [2]
int* const a = &b; [3]
const int* const a = &b; [4]

如果你能區(qū)分出上述四種情況,那么,恭喜你,你已經(jīng)邁出了可喜的一步。不知道,也沒(méi)關(guān)系,我們可以參考《Effective c++》Item21上的做法,如果const位于星號(hào)的左側(cè),則const就是用來(lái)修飾指針?biāo)赶虻淖兞浚粗羔樦赶驗(yàn)槌A浚蝗绻鹀onst位于星號(hào)的右側(cè),const就是修飾指針本身,即指針本身是常量。因此,[1]和[2]的情況相同,都是指針?biāo)赶虻膬?nèi)容為常量(const放在變量聲明符的位置無(wú)關(guān)),這種情況下不允許對(duì)內(nèi)容進(jìn)行更改操作,如不能*a = 3 ;[3]為指針本身是常量,而指針?biāo)赶虻膬?nèi)容不是常量,這種情況下不能對(duì)指針本身進(jìn)行更改操作,如a++是錯(cuò)誤的;[4]為指針本身和指向的內(nèi)容均為常量。
另外const 的一些強(qiáng)大的功能在于它在函數(shù)聲明中的應(yīng)用。在一個(gè)函數(shù)聲明中,const 可以修飾函數(shù)的返回值,或某個(gè)參數(shù);對(duì)于成員函數(shù),還可以修飾是整個(gè)函數(shù)。有如下幾種情況,以下會(huì)逐漸的說(shuō)明用法:

A& operator=(const A& a);
void fun0(const A* a );
void fun1( ) const; // fun1( ) 為類成員函數(shù)
const A fun2( );

二 const的初始化

先看一下const變量初始化的情況
1) 非指針const常量初始化的情況:

A b;
const A a = b;

2) 指針(引用)const常量初始化的情況:

A* d = new A();
const A* c = d;
或者:const A* c = new A();
引用:
A f;
const A& e = f; // 這樣作e只能訪問(wèn)聲明為const的函數(shù),而不能訪問(wèn)一般的成員函數(shù);

[思考1]: 以下的這種賦值方法正確嗎?
const A* c=new A();
A* e = c;
[思考2]: 以下的這種賦值方法正確嗎?
A* const c = new A();
A* b = c;

三 作為參數(shù)和返回值的const修飾符

其實(shí),不論是參數(shù)還是返回值,道理都是一樣的,參數(shù)傳入時(shí)候和函數(shù)返回的時(shí)候,初始化const變量
1 修飾參數(shù)的const,如 void fun0(const A* a ); void fun1(const A& a);
調(diào)用函數(shù)的時(shí)候,用相應(yīng)的變量初始化const常量,則在函數(shù)體中,按照const所修飾的部分進(jìn)行常量化,如形參為const A* a,則不能對(duì)傳遞進(jìn)來(lái)的指針的內(nèi)容進(jìn)行改變,保護(hù)了原指針?biāo)赶虻膬?nèi)容;如形參為const A& a,則不能對(duì)傳遞進(jìn)來(lái)的引用對(duì)象進(jìn)行改變,保護(hù)了原對(duì)象的屬性。
[注意]:參數(shù)const通常用于參數(shù)為指針或引用的情況;
2 修飾返回值的const,如const A fun2( ); const A* fun3( );
這樣聲明了返回值后,const按照"修飾原則"進(jìn)行修飾,起到相應(yīng)的保護(hù)作用。

const Rational operator*(const Rational& lhs, const Rational& rhs)
{
return Rational(lhs.numerator() * rhs.numerator(),
lhs.denominator() * rhs.denominator());
}

返回值用const修飾可以防止允許這樣的操作發(fā)生:

Rational a,b;
Radional c;
(a*b) = c;

一般用const修飾返回值為對(duì)象本身(非引用和指針)的情況多用于二目操作符重載函數(shù)并產(chǎn)生新對(duì)象的時(shí)候。
[總結(jié)] 一般情況下,函數(shù)的返回值為某個(gè)對(duì)象時(shí),如果將其聲明為const時(shí),多用于操作符的重載。通常,不建議用const修飾函數(shù)的返回值類型為某個(gè)對(duì)象或?qū)δ硞€(gè)對(duì)象引用的情況。
原因如下:
如果返回值為某個(gè)對(duì)象為const(const A test = A 實(shí)例)或某個(gè)對(duì)象的引用為const(const A& test = A實(shí)例),則返回值具有const屬性,則返回實(shí)例只能訪問(wèn)類A中的公有(保護(hù))數(shù)據(jù)成員和const成員函數(shù),并且不允許對(duì)其進(jìn)行賦值操作,這在一般情況下很少用到。

[思考3]: 這樣定義賦值操作符重載函數(shù)可以嗎?
const A& operator=(const A& a);

四 類成員函數(shù)中const的使用

一般放在函數(shù)體后,形如:void fun() const;
如果一個(gè)成員函數(shù)的不會(huì)修改數(shù)據(jù)成員,那么最好將其聲明為const,因?yàn)閏onst成員函數(shù)中不允許對(duì)數(shù)據(jù)成員進(jìn)行修改,如果修改,編譯器將報(bào)錯(cuò),這大大提高了程序的健壯性。

五 使用const的一些建議

1 要大膽的使用const,這將給你帶來(lái)無(wú)盡的益處,但前提是你必須搞清楚原委;
2 要避免最一般的賦值操作錯(cuò)誤,如將const變量賦值,具體可見(jiàn)思考題;
3 在參數(shù)中使用const應(yīng)該使用引用或指針,而不是一般的對(duì)象實(shí)例,原因同上;
4 const在成員函數(shù)中的三種用法(參數(shù)、返回值、函數(shù))要很好的使用;
5 不要輕易的將函數(shù)的返回值類型定為const;
6除了重載操作符外一般不要將返回值類型定為對(duì)某個(gè)對(duì)象的const引用;




[思考題答案]
1 這種方法不正確,因?yàn)槁暶髦羔樀哪康氖菫榱藢?duì)其指向的內(nèi)容進(jìn)行改變,而聲明的指針e指向的是一個(gè)常量,所以不正確;
2 這種方法正確,因?yàn)槁暶髦羔標(biāo)赶虻膬?nèi)容可變;
3 這種做法不正確;
在const A::operator=(const A& a)中,參數(shù)列表中的const的用法正確,而當(dāng)這樣連續(xù)賦值的時(shí)侯,問(wèn)題就出現(xiàn)了:
A a,b,c:
(a=b)=c;
因?yàn)閍.operator=(b)的返回值是對(duì)a的const引用,不能再將c賦值給const常量。

posted on 2007-04-05 15:59 jay 閱讀(1771) 評(píng)論(1)  編輯 收藏 引用 所屬分類: C++

評(píng)論:
# re: const使用詳解 [未登錄](méi) 2014-04-16 12:29 | sky
A f;
const A& e = f; // 這樣作e只能訪問(wèn)聲明為const的函數(shù),而不能訪問(wèn)一般的成員函數(shù);


不是這樣的吧,測(cè)試環(huán)境GNU/Linux g++  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            伊人蜜桃色噜噜激情综合| 欧美高清你懂得| 久久久综合免费视频| 一区二区三区蜜桃网| 亚洲免费激情| 亚洲一区二区三区午夜| 亚洲欧美日韩一区二区| 久久精品国产免费观看| 久久夜色精品亚洲噜噜国产mv| 裸体女人亚洲精品一区| 亚洲黄色一区二区三区| 亚洲国内欧美| 亚洲一区二区免费| 久久精品综合| 欧美激情在线观看| 国产精品美女www爽爽爽视频| 国产一区二区丝袜高跟鞋图片| 亚洲国产精品日韩| 亚洲视频1区2区| 久久婷婷av| 日韩一级成人av| 久久精品毛片| 欧美午夜美女看片| 亚洲国产成人精品女人久久久| 99国产精品99久久久久久粉嫩| 欧美在线亚洲在线| 亚洲精品视频在线看| 欧美一级大片在线观看| 欧美日本国产在线| 精久久久久久久久久久| 亚洲一区二区三区在线视频| 欧美阿v一级看视频| 亚洲一区综合| 欧美精品成人在线| 黄色亚洲在线| 先锋影音久久| 日韩一级精品| 欧美国产极速在线| 激情av一区| 欧美资源在线| 日韩一本二本av| 美女日韩欧美| 激情小说亚洲一区| 午夜精品亚洲一区二区三区嫩草| 亚洲欧洲在线播放| 久久婷婷久久| 尤妮丝一区二区裸体视频| 欧美一区免费| 中文在线资源观看网站视频免费不卡| 欧美国产日韩在线观看| 亚洲第一毛片| 久热精品视频在线观看| 欧美一区高清| 国产偷自视频区视频一区二区| 亚洲网友自拍| 一区二区国产精品| 国产精品福利影院| 亚洲在线中文字幕| 亚洲综合色丁香婷婷六月图片| 久久综合网络一区二区| 久久久久九九视频| 午夜精品久久久久久| 欧美色欧美亚洲另类二区| 99re66热这里只有精品4| 亚洲福利视频网站| 男人插女人欧美| 亚洲日韩欧美一区二区在线| 久久久久国产精品www| 欧美一区二区大片| 国产资源精品在线观看| 久久久青草婷婷精品综合日韩 | 欧美激情片在线观看| 亚洲国产成人久久| 欧美激情综合色| 欧美精品一区二区三区蜜臀| 日韩午夜电影在线观看| 亚洲伦理久久| 国产精品亚洲一区| 久久蜜桃精品| 牛牛国产精品| 亚洲午夜精品久久| 欧美亚洲免费高清在线观看| 精品成人在线观看| 亚洲激情视频| 国产精品―色哟哟| 久久午夜羞羞影院免费观看| 欧美电影免费观看高清完整版| 一区二区欧美精品| 亚洲欧美日韩网| 91久久久久久久久| 亚洲一区在线视频| 亚洲激情视频网站| 亚洲欧美在线免费观看| 亚洲国产精品久久精品怡红院 | 欧美激情一区在线观看| 欧美日韩国产精品一区| 久久精品一区四区| 欧美va亚洲va日韩∨a综合色| 亚洲线精品一区二区三区八戒| 性欧美激情精品| 99www免费人成精品| 性色av一区二区怡红| 亚洲免费观看| 欧美淫片网站| 亚洲婷婷综合色高清在线| 久久久久久久网站| 亚洲一区二区三区在线播放| 久久久久久噜噜噜久久久精品| 中文精品在线| 久久一区欧美| 亚洲欧美伊人| 欧美欧美天天天天操| 久久夜色精品一区| 国产精品自拍视频| 亚洲精品一区二区三区99| 极品av少妇一区二区| 亚洲影音先锋| 亚洲婷婷在线| 99精品热视频| 亚洲麻豆国产自偷在线| 国产一区二区三区在线观看视频| 亚洲狼人精品一区二区三区| 樱花yy私人影院亚洲| 欧美一区二区视频在线观看2020 | 国产欧美日本| 日韩一级不卡| 一区二区三区**美女毛片| 久久精品一区二区三区四区| 欧美一区二区精品| 国产精品久久一区主播| 亚洲深夜影院| 亚洲欧美一区二区在线观看| 国产精品久久久久久久久久久久久 | 亚洲国产高清一区| 亚洲国产一区二区三区a毛片| 久久久欧美一区二区| 久久综合图片| 亚洲精品1234| 巨胸喷奶水www久久久免费动漫| 久久夜精品va视频免费观看| 影院欧美亚洲| 欧美国产一区二区| 亚洲三级免费电影| 亚洲一区二区三区午夜| 国产精品自拍三区| 久久精品国产第一区二区三区最新章节| 欧美中文在线视频| 黄色工厂这里只有精品| 久久综合色播五月| 亚洲精品1区2区| 亚洲一区国产| 国产香蕉久久精品综合网| 久久婷婷综合激情| 亚洲精品国产精品乱码不99 | 亚洲福利视频网站| 欧美国产精品| 中文无字幕一区二区三区| 久久久www成人免费毛片麻豆| 精品成人一区二区三区| 欧美激情中文字幕乱码免费| 中文av字幕一区| 久久婷婷麻豆| 夜夜爽www精品| 国产精品日韩电影| 久久一区二区三区国产精品| 亚洲免费高清| 久久综合九色九九| 一区二区三区成人| 国模精品一区二区三区| 欧美精品播放| 久久精品免视看| 一本色道久久加勒比88综合| 久久久国产精品一区二区三区| 亚洲国产成人在线播放| 国产精品美女www爽爽爽| 久久这里有精品视频| 一区二区三欧美| 欧美国产精品v| 亚洲精品一区二区三区蜜桃久| 久久久91精品国产一区二区三区 | 亚洲盗摄视频| 欧美午夜精品理论片a级按摩| 久久久久久久高潮| 亚洲一区久久久| 亚洲大片一区二区三区| 午夜在线精品偷拍| 亚洲毛片一区二区| 有码中文亚洲精品| 国产嫩草影院久久久久| 欧美日韩18| 久久性天堂网| 欧美在线观看一区二区| 亚洲午夜激情| 亚洲精品中文在线| 欧美激情亚洲| 美国成人直播| 久久久久久久999| 欧美专区亚洲专区| 欧美亚洲自偷自偷| 亚洲一区激情|