首页 > 代码库 > C++学习笔记18,C++11中的初始化列表构造函数(二)
C++学习笔记18,C++11中的初始化列表构造函数(二)
C++11中的初始化列表构造函数(Initialize_list Constructors)是将std::initializer_list<T>作为第一个参数的构造函数,并且没有任何其他参数(或者其他参数具有默认值)。例如:
#include <iostream> #include <initializer_list>//必须包含该头文件 #include <vector> using namespace std; class A { private: vector<int> myVector; public: //参数为initializer_list<T> args A(initializer_list<int> args){ for(auto iter=args.begin();iter!=args.end();++iter) myVector.push_back(*iter); } A(const A &)=delete; void showVector(){ for(auto citer=myVector.cbegin();citer!=myVector.cend();++citer) std::cout<<*citer<<" "; cout<<endl; } }; int main() { A a={1,2,3,4,5,6,7,8,9,10,11,12}; //不能写成A a(1,2,3,4,5,6,7,8,9,10,11,12); //a.show(); a.showVector(); }
使用前请查看你的编译器是否支持该C++11特性.我的是GCC C++ 4.8.2完美支持。
编译时请附加特性-std=c++11
编译及运行结果。
有其他参数的情况
//ti2.cpp
<pre name="code" class="cpp">#include <iostream> #include <initializer_list>//必须包含该头文件 #include <vector> using namespace std; class A { private: vector<double> myVector; string str; public: //参数为initializer_list<T> args A(initializer_list<double> args,string s="initailizer_list"){ for(auto iter=args.begin();iter!=args.end();++iter) myVector.push_back(*iter); //i=ii;//i必须有默认值,并且其实这一句没用 str=s;//看后面的,因此这个默认值应该是类内成员初始化 //即定义时赋予初始值:string str="initailizer_list" //不能写成A a={1,2,3,4,5,6,7,8,9,10,11,12.5,55,“is this word!”}; } A(const A &)=delete; void showVector(){ for(auto citer=myVector.cbegin();citer!=myVector.cend();++citer) std::cout<<*citer<<" "; cout<<endl; cout<<"str="<<str<<endl; } }; int main() { A a={1,2,3,4,5,6,7,8,9,10,11,12.5,55}; //不能写成A a={1,2,3,4,5,6,7,8,9,10,11,12.5,55,“is this word!”}; //不能写成A a(1,2,3,4,5,6,7,8,9,10,11,12); //a.show(); a.showVector(); }
编译运行结果:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。