被指物是常量時,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...