我听说我可以使用以下语法初始化一个值:
int foo = {5};
另外,我可以用更少的代码做同样的事情:
int foo{5};
那么,使用它们有什么优点/缺点吗?这是一个好的做法,还是使用标准更好:?
int foo = 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评论中提到的最头疼的parse只是其中之一,元组和多维数组是另一个潘多拉魔盒。
关于c++ - C++11 中奇怪的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16025316/