在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
C++中我们可以平时使用vector等容器时一般这样初始化:vector<int> p={1,2,3}; 其中{1,2,3}是一种叫initializer_list的类型,是C++11新出的 除了可以用来初始化容器, 还可以像python一样用: for x in [1,2,3]: print(x) 1 #include <iostream> 2 3 int main(int argc, char **argv) 4 { 5 for(auto n : {1,2,3,4,5,6}) 6 { 7 std::cout<<n<<std::endl; 8 } 9 10 }
当然这篇博客主要是想记录一下声明直接初始化和声明后赋值的区别:声明时直接初始化:vector<int> p={1,2,3}; 这直接调用相应的构造函数。
声明之后再赋值:vector<int> p; p={1,2,3}; 先调用默认构造函数,再调用拷贝构造函数(赋值运算重载符)。
自己写个模板类,运行一下试试: 1 template<typename T> class MyClass{ 2 public: 3 vector<T> data; 4 MyClass(initializer_list<T> li){data=li;cout<<"{}"<<endl;} 5 MyClass(){} 6 MyClass& operator=(initializer_list<T> li){data=li;cout<<"=="<<endl;} 7 }; 8 9 10 int main() { 11 MyClass<int> x={1,2,3}; 12 MyClass<int> y; 13 y={2,3,4}; 14 getchar(); 15 return 0; 16 }
结果:
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论