C++11及更新版本中列表初始化(花括号)的优势
大家好!我开始学习C++11,遇到了一个新特性——使用花括号进行初始化(list initialization)。例如:
```cpp
std::vector v = {1, 2, 3};
int x{0};
```
看起来一切正常,但我不明白为什么需要它,当有老式的圆括号初始化或赋值操作符时。我觉得这不过是语法糖。
但我听说花括号能解决一些问题。例如,我读到它们可以防止窄化转换(narrowing conversions)。但这是什么?还有哪些优点?
我有一个具体的例子让我困惑:
```cpp
int a = 3.14; // a == 3,只是丢失了小数部分
int b(3.14); // 同样
int c{3.14}; // 编译错误!为什么?
```
我理解这是错误,但为什么要引发它?也许有些情况下花括号的行为出乎意料?例如,对于有`std::initializer_list`构造函数的类。请指教。