本篇內(nèi)容主要講解“C++怎么將成員函數(shù)定義為const類型”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“C++怎么將成員函數(shù)定義為const類型”吧!

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供龍海網(wǎng)站建設(shè)、龍海做網(wǎng)站、龍海網(wǎng)站設(shè)計(jì)、龍海網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、龍海企業(yè)網(wǎng)站模板建站服務(wù),十年龍海做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
Con.2:默認(rèn)情況下,將成員函數(shù)定義為const類型
只要沒(méi)有修改對(duì)象的可觀察狀態(tài),就應(yīng)該將成員函數(shù)定義為const類型。這是設(shè)計(jì)意圖的更清晰表達(dá),可以帶來(lái)更好的可讀性,方便編譯器捕捉更多的錯(cuò)誤,而且有時(shí)還會(huì)帶來(lái)更多的優(yōu)化機(jī)會(huì)。
Example, bad(反面示例)
class Point {
int x, y;
public:
int getx() { return x; } // BAD, should be const as it doesn't modify the object's state
// ...
};
void f(const Point& pt)
{
int x = pt.getx(); // ERROR, doesn't compile because getx was not marked const
}傳遞指針或者引用給非常量也不是說(shuō)一定不好,但是它只應(yīng)該發(fā)生在調(diào)用一個(gè)假定會(huì)修改對(duì)象值的情況下。代碼的讀者必須假設(shè)接受原始T*或T&參數(shù)的函數(shù)會(huì)修改(指針或引用,譯者注)參照的對(duì)象。如果(修改,譯者注)沒(méi)有發(fā)生在現(xiàn)在,那么可能是以后會(huì)發(fā)生而且不需要重新編譯。
Note(注意)
有些代碼/庫(kù)提供的函數(shù)定義了T*參數(shù)卻沒(méi)有修改T。這對(duì)于更新代碼使其適用現(xiàn)在C/C++的人來(lái)說(shuō)是一個(gè)問(wèn)題,你可以
update the library to be const-correct; preferred long-term solution
將庫(kù)更新到正確定義const屬性的版本;優(yōu)先使用長(zhǎng)期的解決方案。
"cast away const"; best avoided
使用常數(shù)類型轉(zhuǎn)換;最好避免這種做法。
provide a wrapper function
提供一個(gè)包裝函數(shù)
Example(示例):
void f(int* p); // old code: f() does not modify `*p`
void f(const int* p) { f(const_cast<int*>(p)); } // wrapper
注意包裝方式是一種只能在f()的聲明無(wú)法改變的情況下使用的“補(bǔ)丁”方案。例如當(dāng)函數(shù)使庫(kù)的一部分而無(wú)法修改時(shí)。
Note(注意)
const類型的成員函數(shù)可以通過(guò)mutable對(duì)象或者借助指針成員修改對(duì)象的值。一個(gè)通常的用法是維護(hù)一個(gè)緩存以回避重復(fù)的計(jì)算。例如,下面的代碼中的Data類就為簡(jiǎn)單的重復(fù)使用緩存(記憶)了一個(gè)字符串表現(xiàn)。
class Date {
public:
// ...
const string& string_ref() const
{
if (string_val == "") compute_string_rep();
return string_val;
}
// ...
private:
void compute_string_rep() const; // compute string representation and place it in string_val
mutable string string_val;
// ...
};
說(shuō)明這件事的另一個(gè)方式是常量屬性是不可傳遞的。一個(gè)const成員函數(shù)修改mutable成員的值,或者通過(guò)一個(gè)非const指針訪問(wèn)對(duì)象值都是可能的。保證這種修改只有在符合其向用戶提供的語(yǔ)義(不變量)是這個(gè)類的工作。
Enforcement(實(shí)施建議)
Flag a member function that is not marked const, but that does not perform a non-const operation on any member variable.
如果一個(gè)函數(shù)沒(méi)有定義為const類型,有沒(méi)有執(zhí)行針對(duì)任何成員變量的非常量操作,標(biāo)記它。
到此,相信大家對(duì)“C++怎么將成員函數(shù)定義為const類型”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
本文標(biāo)題:C++怎么將成員函數(shù)定義為const類型
網(wǎng)站路徑:http://chinadenli.net/article32/ggjhpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、ChatGPT、營(yíng)銷型網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站內(nèi)鏈、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)