C++ const用法 儘量使用const

  C++ const 容許指定一個語義約束,編譯器會強制實施這個約束,容許程序員告訴編譯器某值是保持不變的。若是在編程中確實有某個值保持不變,就應該明確使用const,這樣能夠得到編譯器的幫助。ios

1.const 修飾成員變量 程序員

複製代碼

1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     int a1=3;   ///non-const data
 5     const int a2=a1;    ///const data
 6 
 7     int * a3 = &a1;   ///non-const data,non-const pointer
 8     const int * a4 = &a1;   ///const data,non-const pointer
 9     int * const a5 = &a1;   ///non-const data,const pointer
10     int const * const a6 = &a1;   ///const data,const pointer
11     const int * const a7 = &a1;   ///const data,const pointer
12 
13     return 0;
14 }

複製代碼

const修飾指針變量時:編程

  (1)只有一個const,若是const位於*左側,表示指針所指數據是常量,不能經過解引用修改該數據;指針自己是變量,能夠指向其餘的內存單元。函數

  (2)只有一個const,若是const位於*右側,表示指針自己是常量,不能指向其餘內存地址;指針所指的數據能夠經過解引用修改。spa

  (3)兩個const,*左右各一個,表示指針和指針所指數據都不能修改。指針

2.const修飾函數參數內存

  傳遞過來的參數在函數內不能夠改變,與上面修飾變量時的性質同樣。編譯器

void testModifyConst(const int _x) {
     _x=5;   ///編譯出錯
}

3.const修飾成員函數io

(1)const修飾的成員函數不能修改任何的成員變量(mutable修飾的變量除外)編譯

(2)const成員函數不能調用非onst成員函數,由於非const成員函數能夠會修改爲員變量

複製代碼

1 #include <iostream>
 2 using namespace std;
 3 class Point{
 4     public :
 5     Point(int _x):x(_x){}
 6 
 7     void testConstFunction(int _x) const{
 8 
 9         ///錯誤,在const成員函數中,不能修改任何類成員變量
10         x=_x;
11 
12         ///錯誤,const成員函數不能調用非onst成員函數,由於非const成員函數能夠會修改爲員變量
13         modify_x(_x);
14     }
15 
16     void modify_x(int _x){
17         x=_x;
18     }
19 
20     int x;
21 };

複製代碼

 4.const修飾函數返回值

(1)指針傳遞

若是返回const data,non-const pointer,返回值也必須賦給const data,non-const pointer。由於指針指向的數據是常量不能修改。

複製代碼

1 const int * mallocA(){  ///const data,non-const pointer
 2     int *a=new int(2);
 3     return a;
 4 }
 5 
 6 int main()
 7 {
 8     const int *a = mallocA();
 9     ///int *b = mallocA();  ///編譯錯誤
10     return 0;
11 }

複製代碼

(2)值傳遞

 若是函數返回值採用「值傳遞方式」,因爲函數會把返回值複製到外部臨時的存儲單元中,加const 修飾沒有任何價值。因此,對於值傳遞來講,加const沒有太多意義。

因此:

  不要把函數int GetInt(void) 寫成const int GetInt(void)。
  不要把函數A GetA(void) 寫成const A GetA(void),其中A 爲用戶自定義的數據類型。

 

  在編程中要儘量多的使用const,這樣能夠得到編譯器的幫助,以便寫出健壯性的代碼。

相關文章
相關標籤/搜索