默认 init 和 value init 的含义?

问题描述

我对 C++ 初始化变量的方式感到非常困惑。如果有的话,它们之间有什么区别:

int i; // does this make i uninitialized?
int i{}; // does this make i = 0?
std::array<int,3> a; // is a all zeros or all uninitialized?
std::array<int,3> a{}; // same as above?

谢谢澄清

解决方法

int i; // does this make i uninitialized?

是,如果在本地范围内而不是在全局范围内。

int i{}; // does this make i = 0?

是的,总是。

std::array<int,3> a; // is a all zeros or all uninitialized?

如果在本地范围内未初始化,但在全局范围内归零,即与您的第一个问题相同。

std::array<int,3> a{}; // same as above?

所有值都是默认初始化的,即所有三个元素都归零。

,

当您声明一个变量而不使用值对其进行初始化时,它是未初始化的(它包含以前存储在该地址中的数据)。它还取决于范围和其他因素来确定其初始值。 {} 像在 int i{}; 中使用一样调用其构造函数,该构造函数默认将内存初始化为其默认值。

所有数据结构都是一样的(除了构造函数被删除的那些)。

,

我想补充之前的答案, 当您像这样初始化变量 {} 时,它可以防止类型变窄。例如

int x = 4.5 // It will narrowed to 4
int y{4.5}  //it will not compile