天天看點

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;
}