c++ - 包含已声明但未初始化的项目的初始化列表

标签 c++ initialization list-initialization

当我没有初始化所有项目时,我对初始化列表有疑问。

假设我有以下代码:

class Example {
  int a, b, c;

  Example() : a(1), b(2), c(3) {}
}

我知道成员的初始化顺序是由它们的声明顺序定义的,而不是由它们在初始化列表中列出的顺序定义的,但是,如果我没有 b 在初始化列表中,如下所示?

class Example {
  int a, b, c;

  Example() : a(1), c(2) {}
}

a 初始化为 1,将 b 初始化为未定义的值,将 c 初始化为 3 ?我是否会因为没有严格按照声明的顺序调用初始化列表而出现未定义的行为?或者这些都不是?

我问这个是因为我有一个包含大量数据的类,我想确保其中一些具有初始值,但我不需要初始化所有数据。

最佳答案

不初始化初始化列表中的成员不会导致未定义的行为。阅读它是未定义的行为。未初始化的 int 将被默认初始化,这使其处于不确定状态。

关于c++ - 包含已声明但未初始化的项目的初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53199440/

相关文章:

c - 用\0初始化字符串数组

调用 C++ 复制构造函数而不是 initializer_list<>

c++ - 大括号初始化的微妙之处

c++ - 无法将 QStringList 从 lambda 返回到函数中

c++ - 为什么我在 C 中使用 openMP 时无法在 for 循环中定义数据类型?

c++ - 有没有办法将参数转发给内部 constexpr 函数?

c++ - 是否存在阻止采用D范围的C++语言障碍?

c# - 如何使用泛型类型的子类初始化泛型属性?

C#初始化局部变量一次

c++ - 如果大括号闭合列表的类构造函数大小错误,则编译时错误