const對象
將一個對象定義為不可更改的對象,稱為const對象。
例:const int a = 512 ;
注解:因為const對象在定義後就不能修改,所以定義時必須初始化。
const引用
C++ Primer中寫道“const引用是指向const對象的引用”。我認為至少不夠精確,這句話意在強調非const引用是指向const對象是錯誤的,但是沒有說明const引用也可以指向一般的對象。我給出的定義是:const引用是這樣的一種引用,它只能讀取指向對象的值,但不能修改其指向對象的值。
例:const int a = 512;
int b = 1024;
const int &c = a; //正確!
const int &d = b; //正確!
int &e = a; //錯誤!
指向const對象的指針
這是C++Primer對這種指針的稱呼。這種用法跟上文的const引用是類似的。同樣,把這種指針稱作“指向const對象的指針”是不夠精確的,因為它也可以指向非const對象,只不過這種指針“自以為指向const對象”,即,這種指針只能讀取指向對象的值,但不能修改其指向對象的值,無論這個對象是不是const對象。
例:const int a = 512;
int b = 1024;
const int *c = &a; //正確!
c = &b; //正確!
int *d = &a; //錯誤!
const指針
這也是C++Primer對這種指針的稱呼。這種說法容易與“const引用”混淆,事實上表達的意義完全不同。const指針的特點是——本身的值不能修改。任何企圖給const指針賦值的行為(即使給該指針賦本身的值)都會導致編譯時的錯誤。
例: int a = 0;
int *const b = &a;
b = c; //c是另外一個指針,錯誤!
b = b; //賦本身的值,錯誤!
指向const對象的const指針
別被繞暈了,其實就是上述兩種指針的結合體。這種指針,既不能修改本身的值,也不能修改其所指向對象的值。
例:const int a = 0;
const int *const b = &a;
const成員函數
又被稱作常量成員函數。這種成員函數只能讀取而不能修改其所屬對象的數據成員。
例: class A{
public:
bool IsSame(const A &a)const;
};
其它相關:
const_iterator
每種容器類型中都定義了const_iterator類型,這種類型只能用於讀取容器內的元素,但不能改變其值。
例:vector<string> text;
for(vector<string>::const_iterator iter = text.begin(); iter! = text.end(); ++iter)
{函數體}
暫時就寫這麼多,如有新發現會持續更新。