C++类成员初始化详解:传统初始化 vs 初始化列表

在C++中,类成员的初始化方式有两种:传统初始化初始化列表。本文将深入探讨这两种方式的区别、优劣及适用场景,并通过代码示例演示如何正确使用初始化列表,避免潜在错误。

1. 传统初始化

传统初始化是指在构造函数的函数体内,使用赋值运算符(=)为成员变量赋值。

**示例代码:**cpp#includeusing namespace std;

class person2{public: // 传统初始化 person2(int a, int b, int c) { m_a = a; m_b = b; m_c = c; }

int m_a;    int m_b;    int m_c;};

int main(){ person2 p1(10, 20, 30); cout << '输出传统初始化m_a为: ' << p1.m_a << endl; cout << '输出传统初始化m_b为: ' << p1.m_b << endl; cout << '输出传统初始化m_c为: ' << p1.m_c << endl; return 0;}

2. 初始化列表

初始化列表是在构造函数的参数列表和函数体之间,使用冒号(:)和逗号(,)分隔,对成员变量进行初始化。

**示例代码:**cpp#includeusing namespace std;

class person2{public: // 初始化列表初始化属性 person2() :m_a(30), m_b(40), m_c(60) {

}

int m_a;    int m_b;    int m_c;};

int main(){ person2 p2; cout << '输出初始化列表初始化m_a为: ' << p2.m_a << endl; cout << '输出初始化列表初始化m_b为: ' << p2.m_b << endl; cout << '输出初始化列表初始化m_c为: ' << p2.m_c << endl; return 0;}

3. 区别与优劣

| 特性 | 传统初始化 | 初始化列表 ||---|---|---|| 语法 | 在构造函数体内使用赋值运算符 | 在构造函数参数列表后使用冒号和逗号 || 执行时间 | 成员变量先被默认初始化,再被赋值 | 成员变量直接被初始化 || 效率 | 相对较低,特别是对于复杂类型 | 相对较高 || 常量成员 | 无法初始化 | 必须使用初始化列表 || 引用成员 | 无法初始化 | 必须使用初始化列表 |

4. 常见错误及修正

在使用传统初始化时,容易出现以下错误:

**错误代码:**cppperson2 p2(); // 错误!声明了一个函数,而非对象

**修正:**cppperson2 p2; // 正确!创建了一个名为 p2 的对象

5. 总结

  • 建议优先使用初始化列表初始化成员变量,因为它更高效且可以初始化常量和引用成员。- 对于需要在构造函数中进行复杂逻辑判断才能确定初始值的成员,可以使用传统初始化。

希望本文能够帮助你更好地理解C++类成员的初始化方式,并在实际编码中选择合适的初始化方法。

C++类成员初始化详解:传统初始化 vs 初始化列表

原文地址: https://www.cveoy.top/t/topic/Uu3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录