转载:https://www.cnblogs.com/zzyoucan/p/3570493.html?utm_source=tuicool&utm_medium=referral
C++ primer 上面的一个例子:
1 // constRef.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 6 class constRef 7 { 8 public: 9 constRef(int ii); 10 11 int i; 12 const int ci; 13 int &ri; 14 }; 15 16 constRef::constRef(int ii) 17 { 18 i=ii; 19 ci=ii; 20 ri=i; 21 } 22 23 //constRef::constRef(int ii):i(ii),ci(i),ri(ii){} 24 25 int _tmain(int argc, _TCHAR* argv[]) 26 { 27 constRef B(5); 28 29 printf("%d,%d,%d",B.i,B.ci,B.ri); 30 return 0; 31 }
这样写是有错误的,error C2758: “constRef::ci”: 必须在构造函数基/成员初始值设定项列表中初始化;
constRef::ri”: 必须在构造函数基/成员初始值设定项列表中初始化;
error C2166: 左值指定
const
对象;
而将
constRef::constRef(
int
ii)
{
i=ii;
ci=ii;
ri=i;
}
使用constRef::constRef(
int
ii):i(ii),ci(i),ri(ii){} 替换 就正确了,你知道原因吗?
记住:可以初始化
const
对象或引用类型的对象,但不能对他们赋值。在开始执行构造函数的函数体之前,必须完成初始化。初始化
const
或引用类型数据成员的唯一机会是在构造函数初始化列表中。