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}这种操作也是类似的,只需要重载运算符同样这么传参就可以了。