默认初始化和值初始化的含义?
Meaning of default init and 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{};
中一样使用调用其构造函数,默认情况下将内存初始化为其默认值。
所有数据结构都是一样的(除了构造函数被删除的那些)。
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 x = 4.5 // It will narrowed to 4
int y{4.5} //it will not compile
我对 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{};
中一样使用调用其构造函数,默认情况下将内存初始化为其默认值。
所有数据结构都是一样的(除了构造函数被删除的那些)。
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 x = 4.5 // It will narrowed to 4
int y{4.5} //it will not compile