如何解决默认 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。