const int a ;//此句代碼是錯誤的,由於const修飾的a必需要在定義的時候初始化。ios
int &a;//同理,也是錯的,在定義的時候必需要初始化,其餘類型的數據也是同樣。函數
那麼若是一個類的成員有非靜態const類型,或者引用類型時,該怎麼初始化呢?spa
#include<iostream>
using namespace std;
class A {
public:
const int a;
A (int t){
a=t;
}
};
int main(){
A b(3);//error,由於調用構造函數A(int t)時,至關於把t賦值給常量a,這是不容許的。編譯器報錯: "錯誤:向只讀成員‘A::a’賦值";對象
cout<<b.a<<endl;
return 0;
}
由於A類中有const int a只讀成員,因此在定義一個A類的對象時,必需要初始化對象中的只讀成員。編譯器
那麼咱們只有修改構造函數了io
A (int t){
a=t;
}修改爲:編譯
A(int t):a(t){}這裏用初始化取代了賦值;編譯可以經過。class
普通的成員變量也能夠進行這種初始化 stream
成員名(表達式)變量
可是const只讀類型以及引用類型必須用這種成員名(表達式)初始化。
對於引用類型,同const類型同樣的道理,這裏就不予討論了。