轉(zhuǎn)帖|其它|編輯:郝浩|2010-09-08 18:02:51.000|閱讀 613 次
概述:前幾天在看C++視頻教程的時(shí)候提到了一個(gè)const函數(shù),個(gè)人覺(jué)得const函數(shù)簡(jiǎn)單一點(diǎn)說(shuō)就是在函數(shù)體內(nèi)不能修改類的成員,在C#里面是沒(méi)有這個(gè)說(shuō)法的,在此記錄一下!希望對(duì)大家有幫助。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
前幾天在看C++視頻教程的時(shí)候提到了一個(gè)const函數(shù),個(gè)人覺(jué)得const函數(shù)簡(jiǎn)單一點(diǎn)說(shuō)就是在函數(shù)體內(nèi)不能修改類的成員,在C#里面是沒(méi)有這個(gè)說(shuō)法的,在此記錄一下!以后寫C++代碼待注意了,凡是不用修改類的成員的函數(shù)盡量定義為const函數(shù)!比如在取成員變量的值的時(shí)候,這樣也可以盡量避免bug,而且是在編譯的時(shí)候就不能通過(guò)!
另外就是const函數(shù)是不能調(diào)用非const函數(shù)的,即是是哪個(gè)非const函數(shù)體內(nèi)沒(méi)有修改成員變量的值也不行!例如下面的代碼編譯會(huì)不通過(guò):
代碼
#include<iostream>
using namespace std;
class studentInfo
{
public:
void setScore(int score){this->score=score;}
int getScore() const{printScore();return score;}
void printScore(){cout<<score<<endl;}
private:
int score;
};
int main(void)
{
return -1;
}
如果非要在const成員函數(shù)里面修改成員變量的話該怎么做了?上網(wǎng)查了一下主要有一下兩種方法:
1. 通過(guò)this指針進(jìn)行類型強(qiáng)制轉(zhuǎn)換實(shí)現(xiàn)
類似于下面這樣的方法:
int getScore() const
{
(const_cast<studentInfo*>(this))->score+=1;
return score;
}
2. 將成員變量定義為mutable
類似于下面這樣:
mutable int score;
上面這句代碼就告訴編譯器成員變量r可以在const函數(shù)體內(nèi)修改其值!
其實(shí)我覺(jué)得既然我們已經(jīng)將函數(shù)定義為const了就沒(méi)有必要再在函數(shù)體內(nèi)修改成員變量的值了,不然就失去const函數(shù)的意義了,也就沒(méi)必要將其定義為const函數(shù)!個(gè)人意見(jiàn)!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載