首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >默认init和值init的含义?

默认init和值init的含义?
EN

Stack Overflow用户
提问于 2021-01-01 18:20:42
回答 3查看 119关注 0票数 1

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

代码语言:javascript
运行
复制
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?

感谢您的澄清

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-01 18:32:26

代码语言:javascript
运行
复制
int i; // does this make i uninitialized?

是,如果是在局部作用域而不是全局作用域。

代码语言:javascript
运行
复制
int i{}; // does this make i = 0?

是的,一直都是。

代码语言:javascript
运行
复制
std::array<int, 3> a; // is a all zeros or all uninitialized?

如果在局部作用域中未初始化,但在全局作用域中归零,即与您的第一个问题相同。

代码语言:javascript
运行
复制
std::array<int, 3> a{}; // same as above?

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

票数 1
EN

Stack Overflow用户

发布于 2021-01-01 18:28:21

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

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

票数 0
EN

Stack Overflow用户

发布于 2021-01-01 18:38:39

我想补充上一个答案,当你像这个{}一样初始化变量时,它会阻止类型的缩小。例如

代码语言:javascript
运行
复制
int x = 4.5 // It will narrowed to 4
int y{4.5}  //it will not compile
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65528864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档