C++:构造函数的初始化列表,以及初始化的顺序

构造函数的初始化值列表:

对于对象的数据成员而言,初始化和赋值是有区别的。

当数据成员是 const 、引用,或者属于某种未提供默认构造函数的类类型的话,就必须通过构造函数的初始值列表为这些成员提供初始值,否则就会引发错误。

// 错误:ci 和 ri 必须初始化
CobstRef::ConstRef(int ii)
{// 赋值
    i = ii;
    ci = ii;
    ri = i;
}

//正确
ConstRef::ConstRef(int ii):i(ii),ci(ii),ri(i){}

在类中,初始化是直接初始化数据成员,而赋值实际上是先初始化、再赋值。所以赋值的效率比较低。

更重要的是,一些数据成员是必须要被初始化的。

所以建议大家养成使用初始值列表的习惯。

成员初始化的顺序:

成员初始化的顺序和它们在类定义中出现的顺序一致,构造函数初始值列表中的前后位置不会影响实际的初始化顺序。

猜你喜欢

转载自blog.csdn.net/growth_path_/article/details/82717260