初始化列表的初始化列表

 我来答
农普路开你8887
推荐于2017-09-18 · TA获得超过233个赞
知道答主
回答量:185
采纳率:70%
帮助的人:76万
展开全部

除了性能问题之外,有些时候合初始化列表是不可或缺的,以下几种情况时必须使用初始化列表
1.常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面
2.引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面
3. 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化
struct Test1
{
Test1(int a):i(a){}
int i;
};
struct Test2
{
Test1 test1 ;
Test2(Test1 &t1)
{test1 = t1 ;}
};
以上代码无法通过编译,因为Test2的构造函数中test1 = t1这一行实际上分成两步执行:
1. 调用Test1的默认构造函数来初始化test1
由于Test1没有默认的构造函数,所以1 无法执行,故而编译错误。正确的代码如下,使用初始化列表代替赋值操作
struct Test2
{
Test1 test1 ;
Test2(int x):test1(x){}
}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式