C++中类成员在构造函数参数行直接初始化的写法名称问询
C++ 类构造函数冒号初始化写法说明
正式名称
这种在构造函数参数列表后、函数体前用冒号分隔的初始化语法,正式名称为成员初始化列表(Member Initializer List),是C++标准定义的、用于在构造阶段初始化类非静态成员、基类子对象的标准语法结构。
你给出的示例代码存在的理解偏差
你提供的示例代码逻辑完全反向,无法通过编译:
class MyClass { int A, B; public: MyClass(int a, int b) : a(A), b(B) {} };
- 类内定义的非静态成员是大写的
A、B,构造函数传入的形参是小写的a、b - 成员初始化列表的语法规则为
[待初始化的成员/基类名](初始化表达式),你写的: a(A), b(B)相当于尝试初始化类中不存在的小写成员a、b,同时错误地把现有成员A、B作为初始化的取值来源,完全违背了传入参数初始化类成员的需求,正确写法应为MyClass(int a, int b) : A(a), B(b) {}。
常见使用注意点
- 成员初始化列表的执行时机早于构造函数内部的赋值语句
- 对于const修饰的成员、引用类型成员、没有默认构造函数的类类型成员/基类,必须通过成员初始化列表完成初始化,无法在构造函数体内直接赋值
- 成员的初始化顺序和类内声明的顺序一致,和初始化列表里书写的顺序无关,书写顺序不影响实际执行顺序
内容的提问来源于stack exchange,提问作者Pranjal Kaler
相关产品推荐
相关产品推荐

