C++中const用法小結

        const表示其所修飾的對象不能夠被改變,例如常量,函數,指針等,下面總結一下常見的幾條const用法:
        1 指針常量與常量指針:這兩個概念很容易搞混淆,筆者每次用到這兩個概念的時候都要從新查一下文檔才放心,查看定義與實例的時候,很容易理解兩者的意義與區別,時間一長,概念又模糊了。這裏介紹一個簡單的記法,這個方法<<Effective C++>>第三版中看到的:
        常量指針,即指向常量的指針,故名思議,指針指向的對象是常量,能夠改變指針自己的值,不能夠改變指針指向的對象的值,定義常量指針的時候,const關鍵字應出如今星號的左邊,例如:函數

int a = 10;
int b = 20;
int const * p = &a;  //常量指針,const在星號左邊
*p = 20;             //error 不能經過解引用來修改指針指向的對象的值
p = &b;              //ok 能夠改變指針自己的值

        定義常量指針的時候,const既能夠出如今類型的左邊,也能夠出如今類型的右邊,例以下面兩種寫法是等價的:spa

const int * p1;     //const在int的左邊
int const * p2;     //const在int的右邊

        指針常量,即指針自己是常量,即指針自己的値不能夠被改變,但指針指向的對象的值能夠改變,定義指針常量的時候,const關鍵字出如今星號的右邊,例如:指針

int a = 10;
int b = 20;
int * const p = &a;     //指針常量,const在星號右邊
*p = 20;                //ok 指針指向的對象的值能夠改變
p = &b;                 //error 指針自己的值不能夠改變

        2 聲明迭代器爲const和const迭代器:聲明迭代器爲const就像聲明指針爲const同樣,即聲明一個T* const指針,表示這個迭代器自己的值不能夠改變,不能再指向其它的東西,但其所指向的對象的值是能夠改變的。例如:code

const std::vector<int>::iterator iter = vec.begin()
iter++;          //error
*iter = 10;      //ok

         而若是但願迭代器所指向的東西不能夠被改動,而迭代器自己能夠變化即但願其效果像const T*指針,那麼須要一個const迭代器,即const_iterator,例如:對象

std::vector<int>::const_iterator cIter = vec.begin();
cIter++;             //ok
*cIter = 10;         //error

        3 const成員函數:const成員函數在聲明和定義時都要用const修飾,若是兩個成員函數只是由於const屬性不一樣,這兩個函數能夠重載,例以下面兩個函數能夠同時存在於一個類中:文檔

string GetName() const;  //const成員函數
string GetName();        //non-const成員函數

        非const對象既能夠調用const成員函數,也能夠調用非const成員函數,若是存在上面這種重載的const成員函數和非const成員函數,非const對象會調用非const成員函數;const對象只能夠調用const成員函數,由於調用非const成員函數,可能會對其值作修改。string

相關文章
相關標籤/搜索