條款03 盡可能使用const

2021-09-12 03:51:15 字數 1276 閱讀 2330

被指物是常量時,const寫在型別前或型別後都行

const widget* buf;

widget const* buf;

stl迭代器是以指標為根據塑模出來,所以迭代器的作用就像個t*指標

std::vectorv;

const std::vector::iterator it = v.begin();

*it = 10; //正確, 改變it所指物

++it; //錯誤, it是const

std::vector::const_iterator cit = v.cbegin();

*cit = 10;//錯誤

++cit;//正確

函式返回值與形參

防止引數被修改,預防「沒意義的賦值動作」

const成員函式

確保該成員函式可以作用於const物件

const成員函式的重要性:

c++重要特性:

兩個成員函式如果只是常量性不同,可以被過載。

void print(const textblock& ctb)

c/c++特性:

如果函式的返回型別是個內建型別,那麼改動函式返回值不合法。

縱使合法,by value返回物件意味著改動的其實是返回物件的乙個副本,沒意義。

問題1:我們知道,所有編譯器都強制實施bitwise constness,如果我想在const成員函式內修改non-static成員變數該怎麼做?

解決方法:

利用mutable可以釋放掉non-static成員變數的bitwise constness約束;

mutable  std::size_t textlenght;//這些成員變數可能總是會被更改

mutable bool lengthisvalid;//即使在const成員函式內

問題2:當const和non-const成員函式有著實質等價的實現時,**量很大的情況下,應該如何避免**重複?

解決方法:令non-const版本呼叫const版本即可。

char& operator(std::size_t position)

反向做法不行,const成員函式呼叫non-const成員函式是一種錯誤行為。

條款03 盡可能使用const

use const whenever possible.stl迭代器是根據指標塑模出來的,所以迭代器的作用就像個t 指標。宣告迭代器為const就像宣告指標為const一樣,表示這個迭代器不能指向不同的東西,但它所指的東西的值是可以改變的。如果你希望迭代器所指的東西不可被改動,你需要的是const ...

條款03 盡可能使用const

總結關鍵字const出現在星號左邊,表示被指物是常量 如果出現在出現在星號右邊,表示指標自身是常量 如果出現在星號兩邊,表示被指物和指標兩者都是常量。const char p greeting 指標所指物為常量 char const p greeting 指標是常量stl迭代器是以指標為根據塑模出來...

條款03 盡可能使用const

1 為什麼盡可能使用const?const指定語義約束,即某個物件不應該被改變,並且編譯器會強制執行這條約束。如果某個物件確實不應該被改變,那麼我們就應該將其生命為const,這樣一來,如果違背了這個約束,編譯器將幫助我們檢測出來。2 界定常量指標和指向常量的指標 const type pt 1 t...