c++ - 成员变量初始化

标签 c++ constructor initialization

<分区>

在这些情况下,x 成员变量的初始化是否有任何区别:

struct A {
    int x;
    A() {}
};

struct B {
    int x;
    B() : x(0) {}
};

struct C {
    int x;
    C() : x() {}
};

对于所有这些情况,在我所做的测试中,x 始终设置为初始值 0。这是有保证的行为吗?这些方法有什么区别吗?

最佳答案

对于 B::B()xdirect-initialized作为 0 在成员初始值设定项列表中显式显示。

对于 C::C()xvalue-initialized ,结果 zero-initialized作为成员初始值设定项列表中的 0

另一方面,A::A() 什么也不做。然后对于具有自动和动态存储持续时间的 A 类型的对象,x 将为 default-initialized不确定值,即不保证为 0。 (注意静态和线程局部对象得到 zero-initialized 。)

关于c++ - 成员变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67689388/

相关文章:

C++/WinAPI - 从 DWORD 中删除标志(按位运算符?)

c++ - 加入std::variant <a,b,c>和std::variant <x,y,z>的类型

java - 我无法理解的 ExceptionInInitializerError

c++ - 在一个 Linux 发行版上使用 g++ 编译的可执行文件在另一个发行版上使用是否有限制?

c++ - 实验性 make_array,我可以使用 brace-init 列表作为参数吗?

java - 什么是初始化 block ?

java - Java 中类的优化思路

c++ - 显式非单参数构造函数

c++ - 在 C++ 中初始化对象

c - 尝试使用 const 初始化变量时出现错误 "initializer element is not constant"