C++中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<int> vec;

const std::vector<int>::iterator it1 = vec.begin(); //類似於T* const

*it1 = 10; //正確,指向東西的值可以改變

it1++;//錯誤,不能改變指向的東西。

std::vector<int>::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);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章