尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

实用指南:22 C++11 初始化新姿势:{} 统一初始化(省等号)+initializer_list 底层解析

实用指南:22 C++11 初始化新姿势:{} 统一初始化(省等号)+initializer_list 底层解析
📅 发布时间:2026/6/19 4:35:06

实用指南:22 C++11 初始化新姿势:{} 统一初始化(省等号)+initializer_list 底层解析

2025-09-19 10:07  tlnshuju  阅读(0)  评论(0)    收藏  举报

Hellow! 你们好啊!,今天博主来介绍C++中的{ },有没有铁子会问这有什么介绍的,别急,往下看看就知道了,再问一句铁子们最近秋招的战况如何啊。


1 列表初始化

1 C++98传统的{ }

C++98中⼀般数组和结构体可以⽤{}进⾏初始化。
struct Point
{
int _x;
int _y;
};
int main()
{
int array1[] = { 1, 2, 3, 4, 5 };
int array2[5] = { 0 };
Point p = { 1, 2 };
return 0;
}

2 C++11中的{}

C++11以后想统⼀初始化⽅式,试图实现⼀切对象皆可⽤{}初始化,{}初始化也叫做列表初始化。

• 内置类型⽀持,⾃定义类型也⽀持,⾃定义类型本质是类型转换,中间会产⽣临时对象,最后优化了以后变成直接构造。

• {}初始化的过程中,可以省略掉=

• C++11列表初始化的本意是想实现⼀个⼤统⼀的初始化⽅式,其次他在有些场景下带来的不少便 利,如容器push/inset多参数构造的对象时,{}初始化会很⽅便

class Date
{
public:
Date(int year = 1, int month = 1, int day = 1)
:_year(year)
, _month(month)
, _day(day)
{
cout  v;
//v.push_back(d1);
//v.push_back(Date(2025, 1, 1));
//// ⽐起有名对象和匿名对象传参,这⾥{}更有性价⽐
//v.push_back({ 2025, 1, 1 });

2 C++11中的std::initializer_list

• 上⾯的初始化已经很⽅便,但是对象容器初始化还是不太⽅便,⽐如⼀个vector对象,我想⽤N个值去构造初始化,那么我们得实现很多个构造函数才能⽀持, vector<int> v1 ={1,2,3};vector<int> v2 = {1,2,3,4,5};

• C++11库中提出了⼀个std::initializer_list的类, auto il = { 10, 20, 30 }; // thetype of il is an initializer_list ,这个类的本质是底层开⼀个数组,将数据拷⻉过来,std::initializer_list内部有两个指针分别指向数组的开始和结束。

• 这是他的⽂档:initializer_list,std::initializer_list⽀持迭代器遍历。

https://legacy.cplusplus.com/reference/initializer_list/initializer_list/

• 容器⽀持⼀个std::initializer_list的构造函数,也就⽀持任意多个值构成的 {x1,x2,x3...} 进⾏初始化。STL中的容器⽀持任意多个值构成的 {x1,x2,x3...} 进⾏初始化,就是通过std::initializer_list的构造函数⽀持的。

#include 1
#include
#include
#include
using namespace std;
int main()
{
std::initializer_list mylist;
std::initializer_list mylist3 = { 1,2,3,43,2 };//构造加拷贝构造
std::initializer_list mylist1(mylist);//拷贝构造
std::initializer_list mylist2({ 1,1,1,1});//构造加拷贝构造
mylist = { 10, 20, 30 };
cout  v1({ 1,2,3,4,5 });
vector v2 = { 1,2,3,4,5 };
const vector& v3 = { 1,2,3,4,5 };
// 这⾥是pair对象的{}初始化和map的initializer_list构造结合到⼀起⽤了
map dict = { {"sort", "排序"}, {"string", "字符串"}};
// initializer_list版本的赋值⽀持
v1 = { 10,20,30,40,50 };
return 0;
}

总结:

如果当前容器支持initializer_list构造的话,那么这个initializer_list中就存放对应容器存储的元素就行了

比如vector<int> v,这个v对象存储的元素是int类型,那么initializer_list对象中也要存储int类型的数据。


本期收录于博主的专栏——C++专栏,适用于编程初学者,感兴趣的朋友们可以订阅,不懂的地方也可以评论区留言哦。

感谢每一个观看本篇文章的朋友,更多精彩敬请期待:小董 不懂  *( ̄▽ ̄)°★*

相关新闻

  • 第九届电气、机械与计算机工程国际学术会议(ICEMCE 2025)
  • 第六届大数据、人工智能与物联网工程国际会议(ICBAIE 2025)
  • 文件自动同步软件用哪个好,高效选择指南

最新新闻

  • PS 怎么删除背景色变成透明?4 种实操方法 + 导出透明 PNG 全流程
  • LDO线性稳压器核心参数解析与TC2054/55/2186选型实战指南
  • 2026年比较好的黄山化粪池管道疏通/附近管道疏通/黄山管道疏通专业公司推荐 - 品牌宣传支持者
  • 2026年诚信的四川冷链运输包装/成都纸塑包装/四川包装/成都水果包装长期合作厂家推荐 - 行业平台推荐
  • 【流形学习多模态语言变量分析基础】王阳明代数讲义之解释深度幻觉
  • 基于深度学习的YOLOv8的微表情识别 表情检测 微表情识别

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号