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

隨筆-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>
            亚洲欧美日韩综合| 久久久综合网站| 国产精品自在在线| 国产精品国产三级国产aⅴ9色| 欧美精品aa| 欧美三级欧美一级| 国产精品美女久久久久久免费| 国产精品青草久久| 国产亚洲欧美一级| 亚洲国产一区二区a毛片| 亚洲精选国产| 亚洲一区二区在线看| 亚洲色诱最新| 亚洲精品1区| 一区二区三区**美女毛片 | 欧美另类亚洲| 国产精品99免费看| 韩国女主播一区| 日韩视频免费在线观看| 欧美一级视频免费在线观看| 久久综合狠狠综合久久综合88| 欧美激情中文不卡| 亚洲一区二区高清| 麻豆av福利av久久av| 国产精品成人免费精品自在线观看| 国产日韩欧美在线播放| 亚洲免费成人| 久久色中文字幕| 一本色道久久综合狠狠躁篇怎么玩| 欧美永久精品| 欧美日韩视频一区二区三区| 激情综合中文娱乐网| 日韩亚洲在线| 欧美成人国产va精品日本一级| 亚洲五月六月| 欧美日本三级| 91久久久久久| 久久在线91| 亚洲自拍偷拍色片视频| 欧美精品三区| 亚洲国产mv| 麻豆成人综合网| 午夜在线观看免费一区| 欧美吻胸吃奶大尺度电影| 亚洲人永久免费| 你懂的国产精品永久在线| 性刺激综合网| 国产精自产拍久久久久久| 一区二区三区免费观看| 亚洲福利小视频| 欧美一区二区成人| 国产精品日韩在线| 亚洲综合色噜噜狠狠| 亚洲美女电影在线| 欧美美女视频| 亚洲午夜久久久久久久久电影网| 亚洲人成网站色ww在线| 欧美激情第六页| 亚洲精品久久久久久下一站| 免费黄网站欧美| 久久影院亚洲| 亚洲高清视频的网址| 久久视频在线免费观看| 欧美一区二区精品| 国产一区观看| 久久综合伊人| 免费成人激情视频| 一本色道久久99精品综合| 亚洲福利一区| 久久久久久久久综合| 久久性天堂网| 最新日韩在线| 欧美jjzz| 亚洲视频 欧洲视频| 9久草视频在线视频精品| 国产精品不卡在线| 欧美一站二站| 久久在线免费观看视频| 亚洲国产影院| 日韩写真视频在线观看| 国产精品视频网站| 久久免费精品日本久久中文字幕| 久久精品99国产精品日本| 精品91免费| 亚洲国产视频直播| 欧美性大战xxxxx久久久| 亚洲欧美日韩在线一区| 欧美亚洲一区在线| 亚洲国产日韩综合一区| 一区二区三区国产精华| 国产日产亚洲精品系列| 欧美成人免费在线| 欧美性猛交xxxx乱大交蜜桃 | 亚洲欧美清纯在线制服| 国内视频精品| 亚洲精品欧美精品| 国产在线欧美日韩| 亚洲欧洲日本mm| 国产免费亚洲高清| 欧美国产免费| 国产毛片久久| 亚洲精品国久久99热| 国产手机视频精品| 亚洲人成网站在线观看播放| 国产欧美在线播放| 亚洲精品五月天| 国内成+人亚洲+欧美+综合在线| 91久久精品国产| 有码中文亚洲精品| 亚洲一区视频在线| 亚洲视频免费| 欧美成人一区二免费视频软件| 午夜精品久久| 欧美久久久久| 亚洲电影观看| 原创国产精品91| 亚洲欧美日韩视频二区| 在线一区二区三区四区五区| 蜜臀av国产精品久久久久| 欧美一区二区三区久久精品茉莉花| 欧美成人在线免费观看| 久久综合综合久久综合| 国产女主播一区二区三区| 99这里有精品| 中国女人久久久| 欧美区高清在线| 91久久国产综合久久| 亚洲人成人99网站| 亚洲天堂成人| 亚洲男人影院| 亚洲午夜伦理| 欧美视频免费在线| 亚洲美女黄网| 这里只有视频精品| 欧美人与禽性xxxxx杂性| 亚洲国产精品成人一区二区| 亚洲国产精品久久久| 裸体一区二区| 亚洲大片av| 亚洲久色影视| 欧美日韩一区国产| 一区二区三区|亚洲午夜| 一区二区三区精品视频| 欧美日韩蜜桃| 中文无字幕一区二区三区| 亚洲一区精品视频| 国产精品国产三级欧美二区 | 久久久91精品国产| 国产亚洲毛片| 久久久精品视频成人| 免费成人黄色av| 亚洲福利国产| 欧美精品成人91久久久久久久| 亚洲日本中文字幕免费在线不卡| 99热在这里有精品免费| 欧美三级乱码| 欧美一级成年大片在线观看| 久久亚洲精品一区二区| 亚洲青色在线| 国产精品成人免费精品自在线观看| 亚洲欧美日韩另类| 欧美电影免费观看大全| 一区二区三区黄色| 国产亚洲一级高清| 欧美电影打屁股sp| 亚洲性xxxx| 裸体丰满少妇做受久久99精品| 亚洲精品免费一二三区| 欧美午夜在线观看| 久久久91精品国产一区二区三区| 亚洲高清一区二区三区| 亚洲在线中文字幕| 一区在线观看| 国产精品sss| 久久久久久综合网天天| 亚洲毛片播放| 美女主播精品视频一二三四| 中文av一区二区| 亚洲福利视频在线| 国产伦理一区| 欧美精品一二三| 欧美一区二区视频免费观看 | 亚洲欧洲视频在线| 久久国产精品72免费观看| 亚洲精品亚洲人成人网| 国产亚洲人成a一在线v站| 欧美成人精品h版在线观看| 亚洲欧美在线一区| 亚洲精品自在在线观看| 老鸭窝亚洲一区二区三区| 亚洲特级毛片| 99re这里只有精品6| 1000精品久久久久久久久| 国产乱码精品一区二区三| 欧美日韩中文在线观看| 女仆av观看一区| 久久免费视频观看| 怡红院精品视频| 午夜一区二区三区不卡视频| 亚洲精品在线三区|