之前寫了一個博客《 淺析C++中的初始化列表(區別賦值和初始化)》,講述了類的構造函數使用初始化列表來初始化成員變量。
現在,撇開過往不談,就談一談普通的變量賦值。即是我們要提到的initializer_list。
這同樣是一個C++11的特性。
過往,我們這樣給vector賦值:
std::vector v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
需要感謝的是,C++11讓你更方便。
std::vector v = { 1, 2, 3, 4 };
這就是所謂的initializer list。
更進一步,有一個關鍵字叫initializer list
C++11允許構造函數和其他函數把初始化列表當做參數。
#include
#include
class MyNumber
{
public:
MyNumber(const std::initializer_list &v) {
for (auto itm : v) {
mVec.push_back(itm);
}
}
void print() {
for (auto itm : mVec) {
std::cout << itm << ;
}
}
private:
std::vector mVec;
};
int main()
{
MyNumber m = { 1, 2, 3, 4 };
m.print(); // 1 2 3 4
return 0;
}
最後寫一個類,可以對比一下,加深理解
class CompareClass
{
CompareClass (int,int);
CompareClass (initializer_list);
};
int main()
{
myclass foo {10,20}; // calls initializer_list ctor
myclass bar (10,20); // calls first constructor
}
這下子明白 {} 和 () 的區別了吧!!!