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();
}

编译运行结果:


C++学习笔记18,C++11中的初始化列表构造函数(二)

时间: 2024-12-16 04:49:52

C++学习笔记18,C++11中的初始化列表构造函数(二)的相关文章

c++学习笔记5,多重继承中派生类的构造函数与析构函数的调用顺序(二)

现在来测试一下在多重继承,虚继承,MI继承中虚继承中构造函数的调用情况. 先来测试一些普通的多重继承.其实这个是显而易见的. 测试代码: //测试多重继承中派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; }

Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)

PL/SQL子程序 包括函数和过程.这里的函数指的是用户自己定义的函数,和系统函数是不同的.子程序一般是完成特定功能的PL/SQL程序块,并且具有一定的通用性,可以被不同的应用程序多次调用.Oracle提供可以把PL/SQL程序存储在数据库中,并可以再任何地方来运行它.这样就叫做存储过程或者是函数.过程和函数的唯一区别就是函数总是向调用者返回数据,而过程则不返回数据. 函数 如果用户要经常执行某些操作,并且需要返回特定的数据,那么就可以将这些操作构造成一个函数. 可以使用SQL语句定义函数. 基

大数据学习笔记6&#183;社会计算中的大数据(4)

上一篇介绍了LifeSpec项目,这个项目是关于用户理解和用户画像的.这篇是社会计算部分的最后一篇,关于用户连接和图隐私. 用户连接与隐私保护 用户连接与隐私保护有很强的相关性. 上图中,左边有两个网络.对于用户连接,我们的目标是映射这两个网络和连接这些网络中的用户节点.然后,我们就能产生一个更大的网络.这样,用户就能够被连接在一起,我们就可以知道跨网络的用户信息. 但是,如果从隐私的角度来看这个问题,把第一个图看成一个匿名化处理后的图,称其为目标图:把第二张图看成辅助图或者攻击者可获得的信息.

springmvc学习笔记(18)-json数据交互

springmvc学习笔记(18)-json数据交互 springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 添加json转换的依赖 配置json转换器 json交互测试 输入json串输出是json串 输入keyvalue输出是json串 本文主要介绍如何在springmvc中进行json数据的交互,先是环境准备和配置,然后分别展示了"输入json串,输出是json串"和"输入key/value,输出是json串"两种情况下

Cocos2dx 学习笔记整理----在项目中使用图片(二)

之前了解了一种比较简单的图片的使用方式, 今次来了解稍微复杂一点的图片使用方式,plist+png. 这里要用到之前提到的Texture Packer. Texture Packer是一款图片打包工具,Texture Packer可以将素材打包成我们项目需要的格式. Cocos2dx支持很多种格式, 我们可以将某一种类的或者有共性的图片打包到一个png,然后用plist管理,以节约加载和内存,且显卡支持的纹理尺寸的长宽为2的n次幂,Texture Packer会把纹理整合到次尺寸. 今次我们利用

Ext.Net学习笔记18:Ext.Net 可编辑的GridPanel

Ext.Net学习笔记18:Ext.Net 可编辑的GridPanel Ext.Net GridPanel 有两种编辑模式:编辑单元格和编辑行. 单元格编辑: 行编辑: 可以看出,单元格编辑的时候,只有单元格会进入编辑模式,而行编辑模式中则对编辑行的所有可编辑字段统一进行编辑,通过Update进行更新,Cancel进行取消编辑. 要对Ext.Net GridPanel进行编辑,需要进行两步配置: 配置列的编辑控件(TextField.NumberField.DateField等) 配置编辑插件(

python基础教程_学习笔记18:标准库:一些最爱——shelve

标准库:一些最爱 shelve Shelve唯一有趣的函数是open.在调用它的时候(使用文件名作为参数),它会返回一个Shelf对象,可以用它来存储内容.只需要把它当作普通的字典(但是键一定要作为字符串)来操作即可,在完成工作之后,调用它的close方法. 意识到shelve.open函数返回的对象并不是普通的映射是很重要的. >>> import shelve >>> s=shelve.open('a.txt') >>> s['x']=['a','

Maven学习笔记之——仓库(中)

Maven学习笔记之--仓库(中) 1.    远程仓库的配置 当出现默认的中央仓库无法满足我们的需求或者连接不上的时候.我们可以通过POM文件来指定远程仓库. <repositories> <repository> <id>jboss-maven2-release-repository</id> <name>JBoss Repository</name> <url>http://repository.jboss.org/

Android学习笔记18:自定义Seekbar拖动条式样

Android学习笔记18:自定义Seekbar拖动条式样