C++实现直接使用初始化列表来实现成员变量初始化

在C++类初始化过程中,我们有的时候希望直接通过参数列表初始化所有的参数,或者像vector一样,我们直接通过vector<int> a{1,2,3,4,5}的方式初始化,那么这种方式是如何实现的呢?C++中,std::initializer_list直接给我们提供了这一工具来实现此功能,可以首先将数据读入改模板的实例来传参进行初始化,我们通过一个实例来说明:

#include<iostream>
#include <initializer_list>

template <std::size_t T_size>
class testArray {
	int m_flags[T_size];
public:
	testArray(std::initializer_list<int> il) {
		int i = 0;
		for (auto p = il.begin(); p != il.end() && i < T_size; p++) m_flags[i++] = *p;
	}
	testArray() {
		for (std::size_t i = 0; i < T_size; i++) {
			m_flags[i] = 0;
		}
	}
	void print() {
		for (std::size_t i = 0; i < T_size; i++) {
			std::cout << m_flags[i] << std::endl;
		}
	}
};

int main() {
	testArray<5> t1;
	t1.print();
	std::cout << "*************" << std::endl;
	testArray<3> t2{ 1,2,3 };
	t2.print();
	return 0;
}

打印结果如下:

0
0
0
0
0
*************
1
2
3

就这么简单,当然对于={1,2,3}这种操作也是类似的,只需要重载运算符同样这么传参就可以了。