标签:style color io os strong 数据 sp 代码 on
const int a ;//此句代码是错误的,因为const修饰的a必须要在定义的时候初始化。
int &a;//同理,也是错的,在定义的时候必须要初始化,其他类型的数据也是一样。
那么如果一个类的成员有非静态const类型,或者引用类型时,该怎么初始化呢?
#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类的对象时,必须要初始化对象中的只读成员。
那么我们只有修改构造函数了
A (int t){
a=t;
}修改成:
A(int t):a(t){}这里用初始化取代了赋值;编译能够通过。
普通的成员变量也可以进行这种初始化
成员名(表达式)
但是const只读类型以及引用类型必须用这种成员名(表达式)初始化。
对于引用类型,同const类型一样的道理,这里就不予讨论了。
当一个非静态的成员是常量或是引用类型时,需要怎么样初始化它们
标签:style color io os strong 数据 sp 代码 on
原文地址:http://www.cnblogs.com/coder-j/p/3982549.html