c++11::initializer_list
#include <initializer_list> template <class T> class initializer_list; initializer_list对象中的元素永远是常量值const T,不能initializer_list对象中元素的值修改
1、可以使用初始化列表语法, 将stl容器初始化一系列值,容器类将initializer_list<T> 作为构造函数。 initializer_list类型元素必须相同,编译器将进行必要转换。 std::vector<double> Array{1.12, 4.35, 5.756, 10, 20}; std::vector<double> Array{1.12, 4.35, 5.756, 10.0, 20.0};
2、c++11新增通用的初始化语法,可以使用{}而不是()来调用类构造函数。 int units_sold=0; int units_sold(0); int units_sold={0}; int units_sold{0}; shared_ptr<double> pd {new double}
3、initializer_list类型来实现构造函数,在新建对象时,就可以使用列表初始化的方式了。 class FooVector { std::vector<int> content_; public: FooVector(std::initializer_list<int> list) { for (auto it = list.begin(); it != list.end(); ++it) { content_.push_back(*it); } } }; class FooMap { std::map<int, int> content_; using pair_t = std::map<int, int>::value_type; public: FooMap(std::initializer_list<pair_t> list) { for (auto it = list.begin(); it != list.end(); ++it) { content_.insert(*it); } } }; int main(void) { FooVector foo1 = { 1, 2, 3, 4, 5 }; FooMap foo2 = { { 1, 2 }, { 3, 4 }, { 5, 6 } }; return 0; }