C++11统一列表初始化,initializer_list

server/2024/10/18 5:38:58/

目录

1.C++11统一了列表的初始化

2.initializer_list

3.initializer_list是如何支持的


1.C++11统一了列表的初始化

现在无论内置类型和自定义类型都可以用列表初始化。

class Date
{public:Date(int year, int month, int day):_year(year),_month(month),_day(day) {}private:int _year;int _month;int _day;
}int main()
{int x = 0;//之前初始化int y = {1}//c++11初始化int z {2}//c++11初始化    vector<int> v1 = {1,2,3,4,5};//c++11初始化  vector<int> v2 {1,2,3,4,5};//c++11初始化  Date day1(2004,02,06);//c++98Date day2{2004,02,06};//c++11Date day3 = {2004,02,06};//c++11//new也支持用列表初始化int * pa = new int[4]{1,2,3,4}return 0;
}

2.initializer_list

vector之所以能向上面那样写,是因为c++11引入了initializer_list,用initializer_list作为参数,进行重载了一个构造函数。

This type is used to access the values in a C++ initialization list, which is a list of elements of type const T.

这个类型被用于访问C++的初始化列表,这个列表的的元素类型是const T。

包含<initializer_list>头文件就可以使用initializer_list

auto lt  = {1,2,3,4,5}

这个lt的类型就是 initializer_list,就是用来接收{1,2,3,4,5}。

The initializer_list object refers to the elements of this array without containing them: copying an initializer_list object produces another object referring to the same underlying elements, not to new copies of them。

initializer_list对象引用数组的元素,但是并不包含他们,拷贝一个initializer_list的对象,产生的另一个对象,底层引用相同的元素,不是新拷贝一份。

如果参数是列表,myclass(initializer_list<int> lt);会被优先调用。

struct myclass
{myclass(int a,int b);myclass(initializer_list<int> lt);
};int mian()
{myclass s1(1,1)//myclass(int a,int b)myclass s2{1,1}// myclass(initializer_list<int> lt)return 0;
}

3.initializer_list是如何支持的

这里拿vector举例

template<class T>class vector{public:typedef T* iterator;vector(){}vector(const initializer_list<T>& lt){cout << "	vector(const initializer_list<T>& lt)" << endl;_start = new T[lt.size()];_finsh = _start + lt.size();_endofstorage  = _start + lt.size();iterator vit = _start;for (auto it : lt){*vit++ = it;}}vector& operator=(const initializer_list<T>& lt){cout << "vector& operator=(const initializer_list<T>& lt)" << endl;vector<T> tmp(lt);std::swap(_start,tmp._start);std::swap(_finsh,tmp._finsh);std::swap(_endofstorage,tmp._endofstorage);return *this;}private:T* _start;T* _finsh;T* _endofstorage;};


http://www.ppmy.cn/server/13219.html

相关文章

vue element ui 打开弹窗出现黑框问题

文章目录 问题描述解决方案 问题描述 大家好&#xff01;今天是2024年4月20日 | 农历三月十二&#xff0c;周六的我又做在公司里面写起了代码 今天在做项目的时候遇到一个奇怪的问题&#xff0c;如下图所示&#xff1a; 因为这个页面我做了两个弹框&#xff0c;先弹出来第一个弹…

ArcGIS无法链接在线地图或错误: 代理服务器从远程服务器收到了错误地址(验证服务器是否正在运行)。

这几天我们分享了&#xff01; 谷歌卫星影像图归来&#xff01;ArcGIS直连&#xff01;快来获取_谷歌影像lyr-CSDN博客文章浏览阅读666次&#xff0c;点赞11次&#xff0c;收藏9次。大概。_谷歌影像lyrhttps://blog.csdn.net/kinghxj/article/details/137521877一套图源搞定&a…

Qt Android 动态加载动态库失败

问题描述 经过了七七四十九个劫难后程序终于稳定运行起来了&#xff0c;正当我以为完美时&#xff0c;问题又找上门了&#xff0c;QML 里面的二维码图片加载不起来了&#xff0c;这个图片还不是本地图片&#xff0c;是实时生成的。 开始的时候并没有下面日志输出&#xff0c;…

Java-反射

一、反射机制 1.反射介绍 &#xff08;1&#xff09;反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息(比如成员变量&#xff0c;构造器&#xff0c;成员方法等等),并能操作对象的属性及方法。反射在设计模式和框架底层都会用到 &#xff08;2&#xff09;…

vue 实现实时搜索文档关键字并高亮显示

最近接到的一个新需求&#xff1a;实时搜索文档关键字并高亮显示&#xff0c;听起来好难的样子&#xff0c;仔细分析起来其实也蛮简单的。 实现思路 通过 input 实现关键字的输入&#xff0c;监听关键字的变化&#xff0c;用正则表达式来匹配关键字&#xff0c;然后给关键字添…

【Java Spring MVC项目异常解决】空指针异常NullPointerException

在Spring MVC项目中遇到空指针异常&#xff08;NullPointerException&#xff09;通常与项目中组件的使用有关&#xff0c;如控制器层&#xff08;Controller&#xff09;、业务层&#xff08;Service&#xff09;、Dao层、依赖注入等。 1、控制器层&#xff08;Controller&am…

【C#】防御性编程策略float.TryParse()

float.TryParse(Result[0].ToString(), out realValue1);这行C#代码用于尝试将一个字符串转换成浮点数&#xff08;float&#xff09;。具体来说&#xff0c;它使用了 float.TryParse 方法&#xff0c;这是一个非常常用的方法&#xff0c;用于在转换时提供错误处理&#xff0c;…

QT客户端开发的技术难点

QT是一种功能强大且灵活的跨平台应用程序开发框架&#xff0c;但也存在一些技术难点&#xff0c;需要开发者仔细考虑和克服。以下是一些常见的QT开发技术难点。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 跨平台兼容性 QT框架…