1.定義變數時使用const
char greeting="hello";
char* p=greeting;//non-const pointer,non-const data
const char* p=greeting;//non-const pointer,const data
char* const p=greeting;//const pointer,non-const data
const char* const p=greeting;//const pointer,const data
如果關鍵字const出現在星號左邊,表示被指物為常量;如果出現在星號右邊,表示指標自身是常量;如果出現在星號兩邊,表示被指物和指標都是常量。
2.stl迭代器的const使用
宣告迭代器為const 就像宣告指標為const一樣(即t* const指標),如果希望迭代器所指向的東西不可改動,我們需要const_iterator;
std::vectorvec;
const std::vectoriterator iter=vec.begin();//iter的作用像個t* const
*iter=10;//沒問題,改變iter所指物
++iter;//錯誤!iter是const
std::vector::const_iterator citer=vec.begin();//citer的作用像個const t*
*citer=10;//錯誤,*citer是const
++citer;//沒問題,改變citer.
3.另返回值為乙個常量
為避免如下錯誤的產生:
(a*b)=c;
if(a*b=c);
如果返回值為常量,則上述兩種錯誤都能檢測出來
4.const成員函式
成員函式如果是const意味著該函式不可以改變任何物件內,任何non-static成員變數(bitwise陣營的人相信)。
5.在const和non-const成員中避免重複
一般我們對operator的實現會有兩個版本乙個是常量版本,乙個是非常亮版本,常量版本專門對常量進行處理,非常亮對非常量進行處理,因為非常量版本不能保證不修改常量所以是不能對常量進行處理的,但是這兩種實現的大部分**會發生重合,這時我們該怎麼辦呢?
class k
char& operator(std::size_t position)
}
以上的套路很簡單,就是先強制給物件加上const屬性然後呼叫const版本的然後將返回值強制轉換成非const版本,這樣就避免**重複了。 條款03 盡可能使用const
use const whenever possible.stl迭代器是根據指標塑模出來的,所以迭代器的作用就像個t 指標。宣告迭代器為const就像宣告指標為const一樣,表示這個迭代器不能指向不同的東西,但它所指的東西的值是可以改變的。如果你希望迭代器所指的東西不可被改動,你需要的是const ...
條款21 盡可能使用const
1,只要某值真的保持不變,就應該明確表示出來,這樣一來便可以獲得編譯器的幫助.2,const最具威力的用途用在函式宣告上.3,令函式返回乙個常量值,可以降低client的錯誤,有不至於放棄效率.如 const rational operator const rational lhs,const ra...
條款03 盡可能使用const
被指物是常量時,const寫在型別前或型別後都行 const widget buf widget const buf stl迭代器是以指標為根據塑模出來,所以迭代器的作用就像個t 指標。std vectorv const std vector iterator it v.begin it 10 正確...