規則:如果關鍵字const出現在星號左邊,表示所指內容是常量。如果出現在星號的右邊,表示指針本身是常量(內存的地址不變)。如果出現在星號的兩邊,表示被指物和指針兩者都是常量。
char a[]="hello";char *p=a;//non-const pointer,non-const dataconst char* p=a;//non-const pointer,const datachar* const p=a;//const pointer,non-const dataconst char* const p=a;//const pointer,const data迭代器的作用像個T*指針。聲明迭代器為const等價于T* const.表示這個指針的地址時不能變的,但是其內容可以改變。如果希望迭代器所指內容不要變,需要用const_iterator.
std::vector<int> vec;const std::vector<int>::iterator iter=vec.begin();//T* const*iter=10;//正確++iter;//錯誤std::vector<int> vec;std::vector<int>::const_iterator citer=vec.begin();//const T* *citer=10;//錯誤++citer;//正確成員函數是const:
bitwise constness: 成員函數只有在不更改對象內任何成員變量(static除外)時才可以說是const.
logical constness: 一個const成員函數可以修改它所處理的對象內的某些成員,但只有在客戶端偵測不出的情況下才如此。即使用關鍵字mutable去釋放non-static成員變量的bitwise constness約束。
當const和non-const成員函數有著實質等價的實現時,令non-const版本調用const版本可以避免代碼重復。
新聞熱點
疑難解答