在老版本的C++中,我们可以比较方便得对结构体、数组等对象利用{}进行初始化,而类变量的初始化则取决于构造函数的形式,例如:
struct A {
int a, b, c;
};
class Foo
{
public:
Foo(int n)
{}
};
int main()
{
int number[5] = { 1,2,3,4,5 };
std::vector<int> v = { 1,2,3,4 };
A a = { 0,0,0 };
Foo f(0);
return 0;
}
我们如果想对类对象也采用类似{}的方式进行方便的初始化,可以利用C++11所提供的新的类型:std::initializer_list,允许构造函数或其他函数像参数一样使用初始化列表,这位类对象的初始化和普通数组和结构体的初始化方法提供了统一的桥梁:
class Foo
{
public:
Foo(std::initializer_list<int> nums)
{
for (auto it = nums.begin(); it != nums.end(); it++)
{
}
}
};
int main()
{
//Foo f {1,2,3,4,5}; 这样写也是可以的
Foo f = {1,2,3,4,5};
return 0;
}
其实这个特性不只是可以用在对象构造上,还能将其作为普通函数的形参:
void foo(std::initializer_list<int> v)
{
}
int main()
{
foo({ 6,6,6 });
return 0;
}
这样写起来,是不是觉得方便了很多呢?