类初始化时的构造函数的搜索顺序:

#include<initializer_list>
#include<iostream>
#include<string>
class cat
{
public:
cat(int age, std::string name):age(age),name(name) {
printf("%d,%s", age, name.c_str());
}
private:
int age;
std::string name;
};
class dog {
public:
int age;
dog(int a) {
age = a;
}
dog(const std::initializer_list<int>& vec) {
age = *(vec.begin());
std::cout << "Initializer_list constructor..." << std::endl;
}
};
int main() {
dog d1{ 3 };//initializer_list
cat c1{ 2,"maomao" };//Aggregate Initailization
std::cin.get();
}
注意:
initailizer_lis t的迭代器是一个const iterator ---》所以initializer_list里的值是不可以修改的!!


解决方法:把initializer_list隐式转换为vector

本文探讨了C++中构造函数的初始化顺序,通过示例展示了如何使用初始化列表进行对象属性的初始化,并讨论了初始化列表的迭代器特性和转换为vector的方法。
1234

被折叠的 条评论
为什么被折叠?



