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

embedded/2024/9/24 19:13:20/

目录

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/embedded/12708.html

相关文章

Java | Leetcode Java题解之第45题跳跃游戏II

题目&#xff1a; 题解&#xff1a; class Solution {public int jump(int[] nums) {int length nums.length;int end 0;int maxPosition 0; int steps 0;for (int i 0; i < length - 1; i) {maxPosition Math.max(maxPosition, i nums[i]); if (i end) {end maxP…

IDEA 编码格式设置 UTF-8

IDEA 编码格式设置 UTF-8 1.文件编码设置为UTF-8 Editor > File Encodings 2.编译编码设置为utf-8 Build&#xff0c;Execution&#xff0c;Deployment > Complier > Java Complier 按图中设置&#xff1a;-encoding utf-8

机器学习常用评价指标的公式和含义

在机器学习中&#xff0c;特别是在分类任务中&#xff0c;评价模型性能常用以下指标。这些指标主要基于混淆矩阵&#xff0c;该矩阵记录了实际类别与模型预测类别的对应情况。下面是这些指标的定义和计算公式&#xff1a; 1. TP&#xff08;True Positives&#xff09;: - …

Maven 杂记

pom.xml中的一些注意点 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.…

Spring Boot 常用注解及使用方式 ai问答

在Spring Boot工程中&#xff0c;有许多注解被用来简化配置和声明组件的行为。以下是一些常见的Spring Boot注解及其主要用途&#xff1a; ### 1. **SpringBootApplication** - **用途**&#xff1a;用在主类上&#xff0c;标记这个类是一个Spring Boot应用。 - **内容**&…

wx小程序-button的bindtap事件

一、button标签 由于小程序语法中&#xff0c;处理函数不能带参数&#xff0c;所以不能实现直接调用要修改的数据。所以除了用bindtap&#xff08;提示&#xff1a;bindtap和bind:tap两种语法都是正确的&#xff09;绑定处理函数&#xff0c;还需要在button属性中添加一个data…

【漏洞复现】手机卡号推广商城 login.php接口处存在 SQL 注入漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

ClickHouse 高可用之副本

文章目录 ClickHouse 副本支持副本的引擎配置高可用副本副本应用1.副本表概述2.创建副本表3.写入模拟数据4.副本验证 扩展 —— 在 Zookeeper 中查看副本表信息 ClickHouse 副本 ClickHouse 通过副本机制&#xff0c;可以将数据拷贝存储在不同的节点上。这样&#xff0c;如果一…