C ++ 11中的奇怪初始化

时间:2013-04-15 21:53:14

标签: c++ c++11

我听说我可以使用以下语法初始化值:

int foo = {5};

此外,我可以使用更少的代码执行相同的操作:

int foo{5};

嗯,使用它们有什么优点/缺点吗?这是一个好习惯,或者使用标准可能更好:?

int foo = 5;

1 个答案:

答案 0 :(得分:5)

你给出的三个例子并不完全相同。统一初始化(具有{ }的那些)不允许缩小转换次数

int i = 5.0;   // Fine, stores 5
int i{5.0};    // Won't compile!
int i = {5.0}; // Won't compile!

此外,复制初始化(具有=的复制初始化)不允许显式构造函数。

新的C ++ 11功能统一初始化及其表兄初始化列表(将大括号初始化语法概括为例如标准容器)是一种棘手的动物,有许多怪癖。 @Praetorian在评论中提到的最令人烦恼的解析只是其中之一,元组和多维数组是另一个潘多拉盒子。