不同种类的变量初始化

时间:2016-05-11 08:59:32

标签: c++

C ++中各种类型初始化的目的是什么?正确的是什么?

int i1 = 1;
int i2(1);
int i3{};
int i4 = {1};
int i5 = int{1};

2 个答案:

答案 0 :(得分:11)

int i1 = 1;

这是很好的旧C风格。仍然可以正常工作,在C ++中是常规的。

int i2(1);

这是C ++风格。它的出现是因为某些类型的构造函数需要多个参数。

int i3{};

C ++ 11风格。

int i4 = {1};

这不是传统的。

int i5 = int{1};

这不是传统的。但是由于新的"统一初始化语法"它得到了支持。 C ++ 11。

int i6 = {};

你没有问过这个,但它在C ++ 11中也有效。

int i7{1};

另一个好处是,这可能是C ++ 11中统一初始化语法的最常规用法。

auto i8 = int{1};

感谢KerrekSB对这种令人憎恶的看法,他除了Herb Sutter之外别无他法。这可能会赢得#34; No True Modern C ++"露营,疏远你的同事,他们对第一种语法非常满意。

答案 1 :(得分:4)

TL; DR - 使用X a1 {v};进行初始化。

要从Bjarne Stroustrup本人获取提示,下面直接引用TCPL,第四版 -

  

如果为对象指定了初始化程序,则该初始值设定项确定对象的初始值。   初始化程序可以使用四种语法样式之一:

X a1 {v};
X a2 = {v};
X a3 = v;
X a4(v);
  

其中,只有第一个可以在每个上下文中使用,我强烈建议使用。它更清楚   并且比替代品更不容易出错。但是,第一种形式(用于a1)在C ++ 11中是新的,所以   其他三种形式是您在旧代码中找到的形式。使用=的两种形式是你使用的   下进行。