條款三 盡可能使用const

2021-08-28 21:24:37 字數 1341 閱讀 8431

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 正確...