int x{}; 和 int x = 0; 有什么区别吗?

26

我理解int x{};是一种默认初始化,但它是否与int x = 0;完全相同?

4个回答

31

在这种情况下,结果是相同的。

int x{} 是一种默认初始化方式

不完全正确。请参见默认初始化

int x{}值初始化(自C++11以来),

当使用空初始化程序构造变量时,会执行此初始化。

在这种情况下(即既不是类类型也不是数组类型),值初始化的效果是:

4)否则,对象将零初始化

最后,在这种情况下,零初始化的效果是:

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

另一方面,int x = 0;复制初始化x 被初始化为值 0
正如 @PaulR 所提到的,int x{}; 只支持从 c++11 开始,而 int x = 0 没有这样的限制。

4
“int x {}” 只在 C++11 及其以后版本中支持,这是真的吗?对于需要编写与旧版 C++ 兼容的可移植代码的人来说,难道不应该优先选择“int x = 0”吗? - Paul R
1
@PaulR 添加为它们之间的差异。 - songyuanyao

8

有所不同:

int x=1.888; 这样的写法会让x变成1,但是以后可能会出现很多麻烦。所有专业人士都曾经在自己或他人的代码中遇到过这种情况。

但是,int x{1.888}; 这样的写法则无法编译通过,可以避免这种麻烦。


这里有一个相关的问题,网址是https://dev59.com/JHrZa4cB1Zd3GeqP0kqz - Jason

8
在这种情况下,它们是相同的。 int x{} 将像 static int x 一样初始化 x;即为零。话虽如此,我认为int x = 0 更清晰,并且它有一个好处,就是可以适用于旧的C++标准。

2
它们是完全相同的东西。它们都将被初始化为0
#include <iostream>
#include <string>
using namespace std;

int main()
{
  int y{};
  int x = 0;

  cout << "y: " << y << endl;
  cout << "x: " << x << endl;

  return 0;
}

输出:

y: 0
x: 0

11
请考虑添加相关参考资料以改进此回答,这些资料应该说明这段代码的输出符合标准,而不是由于未定义行为引起的。 - VLL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接