【发布时间】:2015-12-04 11:18:16
【问题描述】:
到目前为止,我发现了 list initialization 的以下用法(又名统一初始化)。
1) 介绍之前是列表初始化功能
int a=3.3f; // ouch fractional part is automatically truncated
但在 C++11 中
int a{3.3f}; // compiler error no implicit narrowing conversion allowed
2) 动态数组元素可以静态初始化。 例如,这个程序在 C++03 中无效,但自 C++11 起有效:
#include <iostream>
int main()
{
int* p=new int[3]{3,4,5};
for(int i=0;i<3;i++)
std::cout<<p[i]<<' ';
delete[] p;
}
3) 它解决了most vexing parse 问题
如果你告诉我列表初始化的其他优点会更好。除了以上3点之外,列表初始化还有什么优势吗?
非常感谢您的回答。
【问题讨论】:
-
您的 stack-crooked.com 链接已损坏,您只是直接链接到该网站而不是您的示例。
-
@mattnewport:修复它。查看更新的问题!!!
-
请注意narrowing conversion is ill-formed,它需要诊断而不是错误。您的问题似乎暗示需要一个错误。
-
@ShafikYaghmour 与 C++ 标准一致,在记录格式错误的代码时在示例中使用“error: ...”
-
@ShafikYaghmour:据我所知,该标准并未明确提及编译器错误与编译器警告的概念。哪些是错误与警告是由实现决定的,通常由用户配置。编译器从不要求在某些情况下不发出代码,它只需要发出符合格式良好程序规范的代码,并在某些其他情况下发出诊断信息。如果出现未定义的行为,它可以发出它想要的任何东西。
标签: c++ c++11 list-initialization