C++ primer 上面的一个例子:
#include "stdafx.h"
class constRef
{
public:
constRef(int ii);
int i;
const int ci;
int &ri;
};
constRef::constRef(int ii)
{
i=ii;
ci=ii;
ri=i;
}
//constRef::constRef(int ii):i(ii),ci(i),ri(ii){}
int _tmain(int argc, _TCHAR* argv[])
{
constRef B(5);
printf("%d,%d,%d",B.i,B.ci,B.ri);
return 0;
}
这样写是有错误的,error C2758: “constRef::ci”: 必须在构造函数基/成员初始值设定项列表中初始化;
constRef::ri”: 必须在构造函数基/成员初始值设定项列表中初始化;
error C2166: 左值指定 const 对象;
使用如下替换构造函数就正确了
constRef::constRef(int ii)
:i(ii),ci(i),ri(ii)
{}
因为:可以初始化const对象或引用类型的对象,但不能对他们赋值。在开始执行构造函数的函数体之前,必须完成初始化。初始化const或引用类型数据成员的唯一机会是在构造函数初始化列表中。