新聞中心
關(guān)于C/C++中const的用法,我們之前也介紹過很多,大家可以看看這兩篇文章,《C++基礎(chǔ) 詳細(xì)介紹const的用法》和《C++初學(xué)者 const使用詳解》,供參考。

10年積累的成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有阿巴嘎免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
今天在學(xué)習(xí)到《Essential C++》第4.1節(jié)時(shí)又有了“稍進(jìn)一步”的發(fā)現(xiàn),即當(dāng)const來修飾一個(gè)類的成員函數(shù)時(shí),它并不僅僅是禁止修改類里面的數(shù)據(jù),而且要求其里面用到的類的成員都是具有const屬性的。如下以為示例:
- // CONST.CPP
- #include
- using namespace std;
- class MyClass
- {
- public:
- MyClass();
- int getValueA();
- int getValueB()const;
- private:
- int a;
- int b;
- };
- MyClass::MyClass()
- {
- a = 1;
- b = 2;
- }
- inline int MyClass::getValueA()
- {
- return a;
- }
- inline int MyClass::getValueB()const
- {
- cout <<"value a: " <
- return b;
- }
- int main()
- {
- MyClass myclass;
- cout <
- cout <<"value a: " <
- return 0;
- }
在上面的代碼中,MyClass中以const修飾的成員函數(shù)getValueB()中調(diào)用了非const成員函數(shù)getValueA(),這段代碼在編譯是會(huì)提示有誤:
IDE: VS 2008
- const.cpp
- D:/Program Files/Microsoft Visual Studio 9.0/VC/include/xlocale(342) : warning C
- 4530: 使用了 C++ 異常處理程序,但未啟用展開語義。請指定 /EHsc
- const.cpp(29) : error C2662: “MyClass::getValueA”: 不能將“this”指針從“const
- MyClass”轉(zhuǎn)換為“MyClass &”
- 轉(zhuǎn)換丟失限定符
IDE: CODEBLOCKS
- F:/Programs/CodeBlocks/C++/Const/const.cpp||In member function 'int MyClass::getValueB() const':|
- F:/Programs/CodeBlocks/C++/Const/const.cpp|29|error:
- passing 'const MyClass' as 'this' argument of 'int MyClass::getValueA()' discards qualifiers|
- ||=== Build finished: 1 errors, 0 warnings ===|
如上錯(cuò)誤可以在將getValueA()添加const修飾后得到更正。
附:
自己說的這些可能早就已經(jīng)在某些書上指出,不過自己沒有碰到,既然剛剛學(xué)到,就記下來以備忘。另外下面再總結(jié)下const的其他點(diǎn)點(diǎn)。
1. const修飾常量、引用等時(shí)
“只讀”屬性。
2. 限定符const與指針時(shí)
有兩種用法,一為指向const對(duì)象的指針,二為const指針。
3. const可以提高編譯效率
編譯器在編譯期間通常不為const常量分配內(nèi)存空間,而是把它保存在符號(hào)表(這個(gè)名詞在《程序員的自我修養(yǎng)》里有很清楚的解釋,空時(shí)再看)。少了存儲(chǔ)與讀內(nèi)存的操作。
注意:
1、在使用指向const對(duì)象指針A的時(shí)候,雖然不能夠通過這個(gè)指針去修改其所指向的對(duì)象,但是并不表示每個(gè)被這種指針?biāo)赶虻膶?duì)象就一定受到良好的“保護(hù)”,因?yàn)檫@個(gè)對(duì)象本身就有可能已經(jīng)被“偷梁換柱”。原因在于“非const對(duì)象的地址是允許賦給const對(duì)象的指針的”。
2、const限定符既可以放在類型前也可以放在類型后,在運(yùn)用typedef寫const類型定義時(shí)容易犯錯(cuò)。所以較好的寫法為把const放在類型的后面。
現(xiàn)在想想這是順其自然的事,因?yàn)橹挥性诒WCconst成員函數(shù)里面調(diào)用的成員函數(shù)不修改對(duì)象的情況下,才能夠保證這個(gè)const成員函數(shù)也不改變對(duì)象。所以被調(diào)用的成員函數(shù)被聲明為const是很保險(xiǎn)的做法。
網(wǎng)頁題目:再議C/C++中const的用法
鏈接分享:http://fisionsoft.com.cn/article/cdioggc.html


咨詢
建站咨詢
