【C++11】列表初始化,std::initializer_list和模版可变参数

server/2025/2/12 5:27:32/

一.列表初始化

一切对象都可以用大括号括起的列表来初始化。

//构造
Date d1(2024, 5, 24);
Date d2{2024, 5, 24};//三个构造
new Date[3]{{2024, 5, 23}, {2024, 5, 24}, {2024, 5, 25}};//构造(隐式)+拷贝构造 优化->一次构造
Date d3 = {2024, 5, 24};

二. std::initializer_list

auto il = { 1, 2, 3 };
vector<int> v = il; //使用initializer_list构造vector

 三.模版可变参数

void _ShowList()
{cout << endl;
}//利用编译时的递归推演,第一个模版参数依次解析获取参数值。
//最后递归到参数包中参数个数为0时,匹配无参的_ShowList
template<class T, class ... Args>
void _ShowList(const T& val, const Args& ... args)
{cout << "val: " << val << endl;cout << "sizeof args: " << sizeof...(args) << endl << endl;_ShowList(args...);
}template<class ... Args>
void ShowList(const Args& ... args)
{_ShowList(args...);
}int main()
{ShowList(1, 2, 3.1, "hello");return 0;
}

emplace系列:

C++11为所有容器增加了emplace系列的插入函数,它和insert函数最大的差别在于,emplace系列可以支持原地构造

vector<string> v;v.push_back("hello"); //先隐式构造一个临时的string对象,再调用移动构造v.push_back("hello"); //直接用“hello”构造,因为string有char*类型的构造函数

 emplace的原理就是模版可变参数,参数包整体向下传递,直到最后匹配到对应的构造函数。

emplace和insert在效率上没有太大的差别,对于深拷贝类,如果传递的是构造对象所需的参数,前者调用构造+移动构造,后者直接构造,效率差不多,因为移动构造代价足够小。


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

相关文章

第二章 Linux的目录和文件管理

Linux的目录和文件管理 一、目录的结构 &#xff08;注意点&#xff09;/root是管理员的家目录&#xff0c;只有管理员的家目录是在根目录&#xff0c;普通用户的家目录都在home&#xff1b; /home &#xff1a; 普通用户的家目录。普通用户权限不够&#xff0c;一般无法直接…

期货学习笔记-斐波那契学习1

斐波那契数列介绍 斐波那契数列是1、1、2、3、5、8、13、21、34、55、89…据说这是数学家莱昂纳多 斐波那契研究兔子繁殖时发现的一个神奇数列&#xff0c;似乎大自然在按照这个数列进行演化&#xff0c;一个斐波那契数字是由该数列相邻的前两个数字相加得到的 在斐波那契交易…

音视频学习规划

文章目录 概述闲聊点 小结 概述 最近在学习音视频&#xff0c;觉得还是要先写个提纲&#xff0c;给自己制定下学习路线及目标。先写下我的个人流程及思路。 ffmpeg的命令ffmpeg api播放器流媒体RTMP&#xff0c;HLS 闲聊点 先说下学习命令行吧&#xff0c;学习命令行是为了…

域内攻击 ----->约束非约束委派攻击

在域中&#xff0c;除了我们常见的横向移动以外&#xff0c;还有很多攻击&#xff0c;像什么kerberoasting&#xff0c;委派攻击&#xff0c;NTLMrelay啊...... 还有很多&#xff08;暂时只知道这些&#xff09; 以前在一篇公众号看到的一个笑话也荟萃了网安的一些攻击手法&am…

鸿蒙应用开发系列 篇四:鸿蒙系统应用开发基础

文章目录 系列文章概述ArkTS应用(Stage模型)示例应用示例代码使用模拟器运行应用使用真机运行应用应用程序包共享包应用配置文件(Stage模型)资源目录示例系列文章 鸿蒙应用开发系列 篇一:鸿蒙系统概述 鸿蒙应用开发系列 篇二:鸿蒙系统开发工具与环境

【MySQL精通之路】SQL优化(1)-查询优化(1)-WHERE子句

主博客&#xff1a; 【MySQL精通之路】SQL优化(1)-查询优化-CSDN博客 下一篇&#xff1a; 【MySQL精通之路】SQL优化(1)-查询优化(2)-范围查询优化-CSDN博客 本节讨论可用于处理WHERE子句的优化。 这些示例使用SELECT语句&#xff0c;但DELETE和UPDATE语句中的WHERE子句也适…

flume简介

Flume 一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系统。 Agent flume中通过agent进行日志采集、聚合、传输。agent是一个JVM进程&#xff0c;它以事件的形式将数据从源头送至目的。Agent 主要有 3 个部分组成&#xff0c;Source、Chann…

如何找到docker的run(启动命令)

使用python三方库进行 需要安装python解释器 安装runlike安装包 pip3 install runlike 运行命令 runlike -p <container_name> # 后面可以是容器名和容器id&#xff0c;-p参数是显示自动换行实验 使用docker启动一个jenkins 启动命令为 docker run -d \ -p 9002:80…