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