2016-03-10 111 views

回答

18

结果在这种情况下是一样的。

int x{};是一种默认初始化的

不完全是。见default initialization

int x{};value initialization(因为C++ 11),

这是当一个变量与一个空的初始构造执行初始化。

和值初始化的在这种情况下的影响(即,既不使用类型也不阵列型)为:

4)否则,该对象是零初始化

最后的zero initialization在这种情况下,效果是:

如果T是一个标量类型,对象的初始值是积分 恒定零显式转换为T.

另一方面,int x = 0;copy initialization; x使用值0初始化。

正如@PaulR所提到的,仅有int x{};仅支持C++ 11,而int x = 0没有这样的限制。

+4

在C++ 11及更高版本中仅仅支持'int x {}'是不是真的?对于那些需要编写可移植的代码的人来说,使用旧的C++标准可能不会有这样的情况:喜欢'int x = 0'? –

+1

@PaulR作为它们之间的差异添加。 – songyuanyao

7

在这种情况下它们是相同的。 int x{}将以与static int x相同的方式初始化x;即归零。也就是说,我发现int x = 0更清晰,它的优点是它可以与较早的C++标准一起使用。

3

它们都是完全相同的东西。他们都将被初始化为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; 
} 

OUTPUT:

y: 0 
x: 0 
+10

请考虑通过添加相关引用来改进此答案,这些引用说明此代码的输出遵循标准,而不是由[未定义行为](https://en.wikipedia.org/wiki/Undefined_behavior)引起的。 –

0

有区别: INT X = 1.888;将与x一起工作1.稍后很多麻烦。所有专业人员都有时会遇到他们或他人的代码。

但 INT X {1.888};不会编译和保存麻烦。

+0

有一个相关的问题在https://stackoverflow.com/questions/20603403/c11-variable-initialization-and-declaration – Jason

相关问题