1、简介
c++11的初始化列表,它的核心目的是直接在对象创建时初始化成员变量,而不是先默认初始化再赋值。这种写法更高效且必要(const、引用、成员类无默认构造参数以及复杂类型可避免默认构造+赋值操作的双重开销)。
class Circle {
public:
const double pi = 3.14159; // 类内初始值
double radius; // 成员变量
// 构造函数:通过初始化列表初始化 radius
Circle(double r) : radius(r) {}
};
2、必须使用初始化列表的场景总结
场景 | 示例 | 原因 |
---|---|---|
初始化 const 成员 | const int x; | const 成员创建后不可修改 |
初始化引用成员 | int& ref; | 引用必须在创建时绑定 |
成员类无默认构造函数 | NoDefault obj; | 无法默认构造,需显式传参 |
提升效率(复杂类型) | std::vector<int> data; | 避免默认构造 + 赋值的双重开销 |
3、注意点:
(1) 初始化顺序与声明顺序不一致
成员变量按声明顺序初始化,与初始化列表顺序无关。若初始化存在依赖关系,需注意顺序。
(2) 忽略必须初始化的成员
若遗漏 const
、引用或不可默认构造的成员,编译器会报错。