标签:c++
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();
}编译时请附加特性-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();
}
编译运行结果:
C++学习笔记18,C++11中的初始化列表构造函数(二),布布扣,bubuko.com
标签:c++
原文地址:http://blog.csdn.net/qq844352155/article/details/27112941