天天看點

C++中const用法1.const和指針:2.const和STL的疊代器:3.函數與const

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);

原文連結