條款21 盡可能使用const

2021-08-30 16:07:16 字數 1290 閱讀 4575

1,只要某值真的保持不變,就應該明確表示出來,這樣一來便可以獲得編譯器的幫助.

2,const最具威力的用途用在函式宣告上.

3,令函式返回乙個常量值,可以降低client的錯誤,有不至於放棄效率.

如:const rational operator*(const rational& lhs,const rational& rhs);

為了防止下面的情況:

rational a, b, c;

...(a * b) = c; // assign to the product of a*b!

注:將乙個數值賦給兩個數值的乘積結果,這在內建型別中肯定不合法.

4,將const應用於引數身上,其行為就想local const物件一樣.

5,const member函式,指明那個成員函式可由const物件呼叫.

例: class string

// operator for const objects

const char& operator(int position) const

private:

char *data;

};string s1 = "hello";

cout << s1[0]; // calls non-const

// string::operator

const string s2 = "world";

cout << s2[0]; // calls const

// string::operator

6,bitwise constness(位常量論)

如果成員是指標,意味著指標指向的物件可以被修改.

由此匯出conceptual constness(概念常量論)

關鍵字:mutable,可以有效解放nonstatic data members在bitwise constness方面的束縛.

7,可能你想要改變const string* const str的值.

可能可行的辦法:

做出乙個local版的str,去掉const屬性.

string* const localstr = const_cast(str);

改變localstr,意味著str的改變,因為指標指向同乙個地方.

還有一種情況:

例如strlen錯誤的宣告:

size_t strlen(char *s); //應該是const char* s

cosnt char* mm="wisdom";

此時可以這麼做:

strlen(const_cast(mm));

條款03 盡可能使用const

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

條款三 盡可能使用const

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 gr...

條款03 盡可能使用const

被指物是常量時,const寫在型別前或型別後都行 const widget buf widget const buf stl迭代器是以指標為根據塑模出來,所以迭代器的作用就像個t 指標。std vectorv const std vector iterator it v.begin it 10 正確...