首页 > 代码库 > 当一个非静态的成员是常量或是引用类型时,需要怎么样初始化它们

当一个非静态的成员是常量或是引用类型时,需要怎么样初始化它们

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类型一样的道理,这里就不予讨论了。

 

当一个非静态的成员是常量或是引用类型时,需要怎么样初始化它们