初始化列表的初始化列表
1个回答
展开全部
除了性能问题之外,有些时候合初始化列表是不可或缺的,以下几种情况时必须使用初始化列表
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){}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询