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

news2024/11/15 7:15:40

一.列表初始化

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

//构造
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.coloradmin.cn/o/1688842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于STM32实现智能空气质量监测系统

目录 文章主题环境准备智能空气质量监测系统基础代码示例&#xff1a;实现智能空气质量监测系统 配置传感器并读取数据数据处理与显示数据存储与传输应用场景&#xff1a;室内环境监测与空气质量控制问题解决方案与优化收尾与总结 1. 文章主题 文章主题 本教程将详细介绍如何…

AI视频智能分析技术:EasyCVR视频汇聚安防监控智能化方案

1、视频智能分析技术原理 视频智能分析技术是一项基于计算机图像视觉分析技术的创新解决方案。它利用先进的算法&#xff0c;将视频场景中的背景和目标进行有效分离&#xff0c;从而实现对目标的精准分析和追踪。 该技术可以对监控摄像头拍摄到的视频进行分析和识别&#xff0…

Java+Spring+ MySQL + MyCat云HIS有哪些优势?智慧医疗云(HIS)低成本与安全保障的完美结合

JavaSpring MySQL MyCat云HIS有哪些优势&#xff1f;智慧医疗云(HIS)低成本与安全保障的完美结合 云HIS的优点包括节省成本、便捷高效、稳妥安全等。通过云HIS&#xff0c;医疗机构无需在本地建立机房、购买服务器和应用软件&#xff0c;降低了硬件和人力成本。同时&#xff0…

OpenWrt改网桥模式(AP模式)

OpenWrt改网桥模式&#xff08;AP模式&#xff09; 点击“接口” 删掉所有 wan 接口 点击“设备”&#xff0c;配置“br-lan" 点击网桥接口&#xff0c;勾选所有接口 点击保存 添加新接口&#xff08;不添加的话路由器自身系统没网&#xff09; 返回 “网络” - “接…

AI大模型的口语练习APP

开发一个使用第三方大模型的口语练习APP涉及多个步骤&#xff0c;从需求分析到部署上线。以下是详细的开发流程和关键步骤&#xff0c;通过系统化的流程和合适的技术选型&#xff0c;可以有效地开发出一个功能丰富、用户体验良好的口语练习APP。北京木奇移动技术有限公司&#…

景源畅信电商:抖店需要的成本高吗?

在数字化时代的浪潮中&#xff0c;短视频平台迅速崛起&#xff0c;成为连接用户与商家的新桥梁。抖音作为其中的佼佼者&#xff0c;不仅改变了人们的娱乐方式&#xff0c;也催生了新型的电商模式——抖店。许多人好奇&#xff0c;入驻这样一个充满活力的平台&#xff0c;需要承…

C++ (week4):Linux基础

文章目录 零、Linux简介1.配置环境2.Linux历史3.Linux模型 一、vim二、Linux命令行 (shell命令)1.常用命令与快捷键(1)常用命令①man命令&#xff1a;查看帮助手册 (2)快捷键 2.用户子系统(1)Linux用户(2)用户命令 3.文件子系统命令(1)目录命令1.创建文件&#xff1a;mkdir2.删…

优于InstantID!中山大学提出ConsistentID:可以仅使用单个图像根据文本提示生成不同的个性化ID图像

给定一些输入ID的图像&#xff0c;ConsistentID可以仅使用单个图像根据文本提示生成不同的个性化ID图像。效果看起来也是非常不错。 相关链接 Code:https://github.com/JackAILab/ConsistentID Paper&#xff1a;https://ssugarwh.github.io/consistentid.github.io/arXiv.pd…

【openlayers系统学习】4.1渲染矢量瓦片、VectorTile 层

一、VectorTile 层 我们现在知道如何加载切片图像&#xff0c;并且已经看到了加载和渲染矢量数据的不同方法。但是&#xff0c;如果我们能够拥有快速传输到浏览器的切片&#xff0c;并且可以动态样式化&#xff0c;那该多好啊&#xff1f;这就是矢量切片的用途。OpenLayers 通…

ubuntu_概念

su(switch user) wget(Web Get) cd(change directory) dpkg(Debian Packager)为 “Debian” 专门开发的套件管理系统&#xff0c;方便软件的安装、更新及移除。 chmod(Change Mode)用于改变文件或目录的权限 ps(Process Status)进程状态 grep(Global Regular Expression Print)…

C++利用TinyXML读取XML文件

TinyXML是什么&#xff1f; TinyXML是一个轻量级的C XML解析器&#xff0c;它提供了一种简单的方法来解析和操作XML文档。TinyXML被设计为易于使用和集成到C项目中&#xff0c;并且非常适合处理小型XML文件。 以下是TinyXML的一些主要特点和优点&#xff1a; 轻量级: T…

李良济中医课堂走进老年大学,倪金山医生讲座守护老年人脊柱健康

5月21日&#xff0c;李良济中医课堂走进姑苏区老年大学&#xff0c;特别邀请倪金山医生&#xff0c;为老年朋友带来“脊柱健康”专题课。 中医课堂上&#xff0c;倪金山医生贴合老年人的身体健康&#xff0c;详细为老年朋友们分享脊柱对身体健康的重要性&#xff0c;如何预防脊…

[笔试训练](三十二)094:素数回文095:活动安排096:合唱团

目录 094:素数回文 095:活动安排 096:合唱团 094:素数回文 题目链接:素数回文_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 模拟题&#xff1a; 1.构造回文数 2.检测是否为素数 #include <iostream> #include <string> #include <c…

商品发布功能

文章目录 1.SPU和SKU介绍1.SPU2.SKU3.两者之间的关系 2.完成商品发布界面1.组件引入1.commoditylaunch.vue 引入到 src/views/modules/commodity下2.multiUpload.vue 引入到 src/components/upload/multiUpload.vue 2.创建菜单1.创建目录2.创建菜单&#xff0c;注意菜单路由要匹…

《艺术大观》知网艺术刊:可加急, 出刊上网快

《艺术大观》 《艺术大观》征文通知 《艺术大观》期刊诚邀学者、艺术家和文化工作者积极投稿&#xff0c;共同探索艺术领域的前沿问题&#xff0c;促进学术交流和艺术创作的发展。我们欢迎各类艺术形式的研究与评论&#xff0c;包括但不限于绘画、雕塑、音乐、舞蹈、戏剧、电…

Linux c开发线程锁和条件变量使用

#include <pthread.h> #include <stdio.h> #include <unistd.h>pthread_mutex_t mutex PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond PTHREAD_COND_INITIALIZER;void* thread_function(void* arg) {printf("线程等待唤醒,锁定互斥量...\n");…

【C语言】程序员自我修养之文件操作

【C语言】程序员自我修养之文件操作 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C语言学习之路 文章目录 【C语言】程序员自我修养之文件操作前言一.文件介绍1.1为什么使用文件1.2文件分类1.3二进制文件和文本文件 二.文件的打开和关闭2.…

个人博客网站搭建笔记1

文章目录 前言要求自己的理解资源过程视频教程SpringBoot开发一个小而美的个人博客p1课程介绍p2需求和功能 前言 自己之前其实就想搭建一个属于自己的网站&#xff0c;但是不知道怎么操作&#xff0c;没找到合适的教程&#xff0c;&#xff08;手把手的那种&#xff09;&#…

Pytest框架实战二

在Pytest框架实战一中详细地介绍了Pytest测试框架在参数化以及Fixture函数在API测试领域的实战案例以及具体的应用。本文章接着上个文章的内容继续阐述Pytest测试框架优秀的特性以及在自动化测试领域的实战。 conftest.py 在上一篇文章中阐述到Fixture函数的特性&#xff0c;第…