1

我已经阅读了很多 C++ 代码,并且遇到了两种初始化变量的方法。

方法一:

int score = 0;

方法二:

int score {};

我知道这int score {};会将分数初始化为 0,因此也会int score = 0;

这两者有什么区别?我已阅读初始化:括号与等号,但这并不能回答我的问题。我想知道等号花括号之间有什么区别,而不是括号。在什么情况下应该使用哪一个?

4

2 回答 2

7

int score = 0;执行复制初始化,作为效果,score被初始化为指定的值0

否则(如果类型既不是类类型T也不other是类类型),如有必要,将使用标准转换other将 的值转换为 的 cv 非限定版本T

int score {};使用从 C++11 开始支持的大括号初始化器执行值初始化,作为效果,

否则,对象是零初始化的

score是内置类型int,最后初始化为零,即初始化为0.

如果T是标量类型,则对象的初始值是显式转换为的整数常量零T

于 2019-12-19T07:44:13.410 回答
0

您可能对 ISO/IEC 14882 8.5.1 感兴趣。它会告诉你一个大括号或相等初始化器可以是赋值表达式或大括号初始化列表。在 Method2 中,您在标量类型上使用默认初始化程序,应将其设置为零。

于 2019-12-19T08:13:16.763 回答