C++中const用法
- 1.const和指針:
- 2.const和STL的疊代器:
- 3.函數與const
-
- ①函數後加const:const是對函數的一個限定,使其無法修改類内的資料成員。const告訴别人這個函數不會改變對象的狀态。
- ②const修飾函數傳回值
- ③形式參數加const:防止傳入的實參被改變。
1.const和指針:
如果const出現在星号左邊,表示被指物是常量;如果出現在星号右邊,表示指針自身是常量;如果出現在星号兩邊,表示被指物和指針兩者都是常量。
char greet[] = “Hello”;
char* p = greet;
//①greet不能變,即不能通過(*p) = 的方式改變
//但仍可通過greet = 的方式改變;指針可指向别處。
const char* p = greet;
char const * p = greet; //同①
char* const p = greet; //②指針不能指向别的,隻能greet;greet可改變
const char* const p = greet;//③都不能變
2.const和STL的疊代器:
STL疊代器是以指針為根據建立出來的,可以視疊代器為T*指針。
①聲明疊代器為const。與聲明指針為const一樣(聲明一個T* const指針),表明該疊代器不能指向其他的東西(容器),但是所指向的東西的值是可以改變的。
②聲明疊代器指向東西的值為const,但指向的東西(容器)可以換成其他的,需要const_iterator。
例如:
std::vector vec;
const std::vector::iterator it1 = vec.begin(); //類似于T* const
*it1 = 10; //正确,指向東西的值可以改變
it1++;//錯誤,不能改變指向的東西。
std::vector::const_iterator it2 = vec.begin();//類似于const T*
*it2 = 10;//錯誤,指向的東西的值不能改變
it2++;//正确,指向的東西可以改變
3.函數與const
①函數後加const:const是對函數的一個限定,使其無法修改類内的資料成員。const告訴别人這個函數不會改變對象的狀态。
聲明一個函數用 const 關鍵字來說明這個函數是一個隻讀函數(read only method),即不會修改任何的資料成員也就是不會改變該對象的狀态。該類函數的聲明和定義時都要加上 const 關鍵字。
不能調用非const函數:如果我們在編寫 const 函數時不小心修改了資料成員,或者調用了其他非 const 成員函數(即會修改資料成員的函數),編譯器将會報錯。這無疑讓代碼更加的健壯。
如 void action(A a) const;
②const修飾函數傳回值
用const來修飾傳回的指針或引用,保護指針指向的内容或引用的内容不被修改,也常用于運算符重載。歸根究底就是使得函數調用表達式不能作為左值。
如:const A& action (A a);
③形式參數加const:防止傳入的實參被改變。
如:void action(const A& a);
原文連結