内置类型成员变量的初始化详解
在 C++ 中,内置类型(如 int
、float
、double
、char
、指针等)的初始化方式与类类型(如 std::string
、自定义类)不同。由于内置类型没有构造函数,它们的初始化行为由编译器直接处理。以下是详细解析:
类中的内置类型成员初始化
在类中,内置类型成员的初始化方式取决于:
-
是否有类内声明默认值?
-
是否在构造函数初始化列表中显式初始化?
情况 1:无默认值 + 无显式初始化 → 随机值
cpp
class Foo {int x; // 未初始化 public:Foo() {} // x 的值是随机的 };
-
行为:
x
没有赋值行为,值是内存残留数据(UB)。
情况 2:有类内默认值 → 使用默认值
cpp
class Bar {int x = 42; // 类内默认值 public:Bar() {} // Bar():x(42) {} };
-
行为:编译器在构造函数中插入
x (42)
的代码,生成的目标文件中构造函数会有x赋值42的硬编码指令。
情况 3:显式初始化列表 → 覆盖默认值
cpp
class Baz {int x = 42; // 类内默认值 public:Baz() : x(100) {} // x = 100(覆盖默认值) };
-
行为:编译器在构造函数中插入
x (100)
的代码,生成的目标文件中构造函数会有x赋值100的硬编码指令。