尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【C++】 C++11 统一列表初始化
目录一、 一切皆可 {}二、 自定义类型自动调用构造函数三、 幕后操作std::initializer_list四、 玩转 STL 容器告别繁琐的 push_back总结在 C11 之前初始化一个变量或对象的方式五花八门等号赋值、括号传参、大括号给数组赋初值……不仅繁琐还容易让人记混。C11 带着“大一统”的使命走来彻底改变了这一切。在 C98 中标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。比如int array1[] {1, 2, 3};或是给结构体赋值Point p {1, 2};。但是到了 C11这种大括号{}初始化列表的使用范围被极大地扩大了使其可用于所有的内置类型和用户自定义的类型。这就是我们今天要聊的——统一列表初始化。一、 一切皆可{}在 C11 中使用初始化列表时可添加等号也可不添加。这种语法不仅适用于基础变量连数组和new表达式也能完美适配。// 基础变量初始化可以不要等号intx11;intx2{2};// C11 新玩法// 数组初始化同样可以省去等号intarray1[]{1,2,3,4,5};intarray2[5]{0};// 全部初始化为0// 自定义结构体structPoint{int_x;int_y;};Point p{1,2};// C11 中列表初始化也可以适用于 new 表达式中int*panewint[4]{0};二、 自定义类型自动调用构造函数对于类Class对象C11 同样支持这种写法。创建对象时也可以使用列表初始化方式调用构造函数初始化。假设我们有一个Date类classDate{public:Date(intyear,intmonth,intday):_year(year),_month(month),_day(day){coutDate(int year, int month, int day)endl;}private:int_year;int_month;int_day;};intmain(){Dated1(2022,1,1);// old style传统的括号传参// C11 支持的列表初始化这里会调用构造函数初始化Date d2{2022,1,2};Date d3{2022,1,3};return0;}以前给对象传参必须用小括号()现在用大括号{}一样可以精准触发对应的构造函数代码风格得到了史诗级的统一三、 幕后操作std::initializer_list为什么 C11 的{}这么强大当我们写下auto il { 10, 20, 30 };时这个等号右边的{}到底是个什么东西答案是它的类型是std::initializer_list。你可以把它理解为一个轻量级的、用来接收大括号列表的系统内置类型。它的出现彻底盘活了 STL 容器的初始化。四、 玩转 STL 容器告别繁琐的 push_backstd::initializer_list一般是作为构造函数的参数。C11 对 STL 中的不少容器就增加了以std::initializer_list作为参数的构造函数这样初始化容器对象就更方便了。同时它也可以作为operator的参数这样就可以用大括号赋值。在没有 C11 之前初始化一个vector往往需要先定义再一行行地push_back十分痛苦。现在一行代码搞定// 丝滑的容器初始化vectorintv{1,2,3,4};listintlt{1,2};// 连 Map 这种键值对容器也能轻松驾驭// 这里 {sort, 排序} 会先初始化构造一个 pair 对象mapstring,stringdict{{sort,排序},{insert,插入}};// 使用大括号对容器赋值v{10,20,30};总结C11 的统一列表初始化不仅仅是“少写一个等号”这么简单的语法糖。它通过扩展{}的使用范围并引入底层的std::initializer_list彻底打通了内置类型、自定义类和 STL 容器之间的初始化壁垒让 C 的代码变得更加现代、简洁和优雅。
RELATED

相关推荐

linux 线程有自己独立的内核栈(内核栈中存储着pcb)吗?

linux 线程有自己独立的内核栈(内核栈中存储着pcb)吗?

疑问:首先,我们知道所有线程共享主线程的虚拟地址空间(current->mm指向同一个地址),且都有自己的用户态堆栈(共享父进程的地址空间,再在里面分配自己的独立栈,默认2M)…

📅 2026/8/23 2:33:09
程序员别再花冤枉钱了:web应用托管0成本方案详解

程序员别再花冤枉钱了:web应用托管0成本方案详解

程序员别再花冤枉钱了:web应用托管0成本方案详解 做独立开发这些年,我踩过的坑比写的代码还多。 最让我后悔的不是某个功能没做出来,而是花了大量时间和钱去买服务器、搭环境、配域名,结果项目压根没人用,所有投入全部…

📅 2026/8/23 2:33:09
物联网安全实践:SE050与STM32F412RE硬件加密方案

物联网安全实践:SE050与STM32F412RE硬件加密方案

1. 物联网安全现状与SE050的定位在2023年的物联网安全态势报告中,全球每天新增的物联网设备达到惊人的150万台,而其中近70%的设备存在可被利用的安全漏洞。这个数字背后反映的是一个残酷的现实:物联网设备正在成为黑客攻击的"软肋"…

📅 2026/8/23 2:33:19
MORE NEWS

更多资讯

📰

Ubuntu 22.04 安装 librealsense 完整指南:源码编译 5 步拿到第一路深度流

Ubuntu 22.04 安装 librealsense 完整指南:源码编译 5 步拿到第一路深度流 【免费下载链接】librealsense RealSense SDK 项目地址: https://gitcode.com/GitHub_Trending/li/librealsense librealsense 即 RealSense SDK 2.0,是面向 RealSense 深…

📰

PTO-ISA 位运算指令 TOR 详解:Tile 逐元素按位或的原理、语法与实战

PTO-ISA 位运算指令 TOR 详解:Tile 逐元素按位或的原理、语法与实战 【免费下载链接】pto-isa Parallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers hi…

📰

awesome-prompts 创意写作提示词实用指南:三步让初稿去掉 AI 味

awesome-prompts 创意写作提示词实用指南:三步让初稿去掉 AI 味 【免费下载链接】awesome-prompts Curated list of chatgpt prompts from the top-rated GPTs in the GPTs Store. Prompt Engineering, prompt attack & prompt protect. Advanced Prompt Engine…

📰

RxJS 6.x 到 7.x 升级全指南:官方变更清单逐项解读与迁移实战

RxJS 6.x 到 7.x 升级全指南:官方变更清单逐项解读与迁移实战 【免费下载链接】rxjs A reactive programming library for JavaScript 项目地址: https://gitcode.com/gh_mirrors/rx/rxjs 本指南以官方文档 6-to-7-change-summary.md 为骨架,逐条解…

📰

如何用quic-go快速部署HTTP/3服务器:配置项全解析与踩坑清单

如何用quic-go快速部署HTTP/3服务器:配置项全解析与踩坑清单 【免费下载链接】quic-go A production-ready QUIC implementation in pure Go 项目地址: https://gitcode.com/gh_mirrors/qu/quic-go 本文带你用 quic-go(一个纯 Go 编写、可直接用于…

📰

DDU显卡驱动彻底清理指南:从残留原理到重装避坑全解析

很多人一提到换显卡驱动就头大,尤其是那种“升级NVIDIA驱动后黑屏”“换了新显卡老驱动残留导致游戏闪退”“AMD显卡驱动控制面板突然打不开”的情况。折腾一圈发现,问题不是新驱动不行,而是旧驱动压根没卸干净。这时候就需要DDU(…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬