C++ 筆記 const關鍵字修飾函數返回值

const 位於返回類型前,表明返回對象爲常量,不可改變。

如果修飾指向常量的指針。

 1 const char * const helpFun()
 2 {
 3     char * p =new char[3];
 4     p[0]='a';
 5     p[1]='b';
 6     p[2]='\0';
 7     return p;
 8 }
 9 
10 int main()
11 {
12     const char * p = helpFun();
13     p++;
14     cout<<p<<endl;
15     delete p;
16     return 0;
17 }

如果通過函數來創建常字符串,除了在main 函數中約束之外,也可以在函數返回類型中約束,第一行中左邊的const 約束了返回的是常字符串的指針索引,因爲它的存在12行必須聲明爲 const char *p,如果第一行左邊const 不存在,那麼12行可以加可以不加const,這樣約束常字符串的效果只能在main 中反映,不能很好的表達調用函數的功能。

  同時第一行中的第二個const 加了也無效,其約束的是一個由 char * p 轉變爲 char * const 的隱藏指針,該隱藏指針的指向值賦予給main 函數中的p,所以後者可以修改指向。

 

const位於方法參數列表後,如 void test() const;

此種情況表明,此方法不會改變調用對象的狀態,保證了調用對象的常量性。

const修飾成員函數的兩個作用

在設計類的時候,一個原則就是對於不改變數據成員的成員函數都要在後面加 const,而對於改變數據成員的成員函數不能加 const。所以 const 關鍵字對成員函數的行爲作了更加明確的限定:有 const 修飾的成員函數(指 const 放在函數參數表的後面,而不是在函數前面或者參數表內),只能讀取數據成員,不能改變數據成員;沒有 const 修飾的成員函數,對數據成員則是可讀可寫的。 

除此之外,在類的成員函數後面加 const 還有什麼好處呢?
“獲得能力:可以操作常量對象”,其實應該是常量(即 const)對象可以調用 const 成員函數,而不能調用非const修飾的函數。  

對於const成員函數,"不能修改類的數據成員,不能在函數中調用其他不是const的函數",這是由const的屬性決定的 。

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