类中指任何类型的
const
和引用数据成员。
const
和引用数据成员也必须是在成员初始化表中被初始化
,否则,就会产生编译时刻错误。例如,下列构造函数的实现将导致编译时刻错误:
class ConstRef {
public:
ConstRef( int ii );
private:
int i;
const
int ci;
int &ri;
};
ConstRef::ConstRef( int ii )
{ //
赋值
i = ii; // ok
ci = ii; //
错误
:
不能给一个
const
赋值
ri = i; //
错误
ri
没有被初始化
}
当构造函数体开始执行时,所有
const
和引用的初始化必须都已经发生。因此,只有将它们在成员初始化表中指定这才有可能。正确的实现如下:
// ok:
初始化引用和
const
ConstRef::ConstRef( int ii ):ci( ii ), ri( i )
{ i = ii; }
每个成员在成员初始化表中只能出现一次,初始化的顺序不是由名字在初始化表中的顺序决定,而是由成员在类中被声明的顺序决定的。
成员初始化表只提供该类数据成员的初始化。在构造函数体内对数据成员设置值是一个赋值操作。
转载于:https://blog.51cto.com/goodidea/201623