c++ - C++11 中奇怪的初始化

标签 c++ c++11

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

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/

相关文章:

c++ - 抛出的(默认)构造函数中的异常保证应该是什么?

c++ - 假设 C++11 中已知子级布局,重新解释基类是否安全?

c++ - 如何使用实例渲染将每个实例数据(例如定位)传递给 OpenGL 3.2 中的着色器?

c++ - 使用 Valgrind 输出调查内存泄漏

c++ - 为什么在使用<set>迭代器时不能使用成员函数获取成员变量?

c++ - 我怎样才能初始化这个结构?

c++ - 如果我只想指定一个哈希函数,我应该将什么传递给 unordered_map 的存储桶计数参数?

c++ - 如何使用 mongocxx c++ 驱动程序递归生成 Mongodb 文档?

c++ - 将矩阵旋转 N 度

c++ - 无法将派生比较传递给 std::priority_queue