C++11支持在类成员变量声明时直接进行初始化,这一特性被称为 类内初始化
相比于传统方式(在构造函数初始化),类内初始化提供了更简洁直观的语法,减少了重复代码。

‌正确的初始化顺序是:‌

‌1. 构造函数初始化列表‌(最高优先级)
‌2. 类内成员初始化‌(声明时初始化)
3‌. 构造函数体内的赋值‌

‌详细解释:‌

当同时使用类内成员初始化‌(声明时初始化)和 构造函数初始化列表时,‌初始化列表会覆盖声明时的初始值‌。声明时初始化更像是提供一个"默认值",如果初始化列表中显式指定了值,就会使用初始化列表中的值。

‌示例代码说明:

class Example {
public:
    int a = 10;  // 类内成员初始化
    int b = 20;
    int c = 30;
    
    // 构造函数
    Example() : a(15) {  // 初始化列表
        // 构造函数体
        b = 25;  // 这是赋值,不是初始化
    }
};

在这个例子中:

  • 成员 a 的最终值是 15(初始化列表覆盖了声明时的10)
  • 成员 b 的最终值是 25(构造函数体内的赋值覆盖了声明时的20)
  • 成员 c 的最终值是 30(声明时初始化的30)

‌初始化顺序总结:‌

  1. 首先执行构造函数初始化列表
  2. 如果没有在初始化列表中指定,则使用声明时的初始值
  3. 最后执行构造函数体内的代码
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐