Avatar ·

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`构造函数的类。请指教。