C++11增加了{}的统一初始化
基本语法是int z{ 0 };
有一些场景会与预想的不一样,在重载了多个实现的情况下,即使存在类型完全一致的函数,仍会优先匹配std::initializer_list为参数的函数,并发生类型转换
class Widget {
public:
https://blog.csdn.net/gw85047034
Widget(int i, bool b); // as before
Widget(int i, double d); // as before
Widget(std::initializer_list il); // added
…
};
Widget w1(10, true); // 使用括号,调用第一个构造函数
Widget w2{10, true}; // 使用花括号,现在调用std::initializer_list构造函数
// (10 and true 转换成 long double)
Widget w3(10, 5.0); // 使用括号,调用第二个构造函数
Widget w4{10, 5.0}; // 使用花括号,现在调用std::initializer_list构造函数
// (10 and 5.0 转换成 long double)
对于vector也有很大区别,是调用函数,还是用一个vector初始化另一个vector
std::vector v1(10, 20); // 使用non-std::initializer_list构造函数
// 创建10个元素的std::vector,
// 所有元素的值都是20
std::vector v2{10, 20}; // 使用std::initializer_list构造函数
// 创建2个元素的std::vector,
// 元素值分别是10和20