初始化列表详解
1.类中包含以下成员,必须放在初始化列表位置进行初始化:
1. 引用成员变量
2.const成员变量
3. 自定义类型成员(且该类没有默认构造函数时 )
2. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关
内置类型成员
1.如果没有在类中声明默认值,也没有初始化列表显式赋值,那么就直接不管内置类型的初始化了,没有对应初始化指令,是内存残留值。
自定义类型
1.自定义类型不能在类中声明默认值,如果没有显式调构造,编译器会去自动调自定义类型的默认构造,如果不存在默认构造就报错
静态成员变量为什么必须在类外初始化?
1. 静态成员的核心特性
-
共享性:类的所有对象共享同一份静态成员。
-
生命周期:存在于程序的整个生命周期(类似全局变量)。
-
存储位置:不在对象内存中,而是存储在全局/静态数据区
2.语言规则要求
-
声明定义分离:
-
类内:仅作声明(告诉编译器存在这个静态成员)。
-
类外:实际分配内存并初始化(定义)
-
3.初始化语法规则
基本形式
cpp
// 类内声明 class MyClass { public:static int s_value; // 声明(不分配内存) };// 类外定义和初始化 int MyClass::s_value = 42; // 必须出现在.cpp文件中