news 2026/6/15 18:50:31

C++笔记-C++11(一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++笔记-C++11(一)

1.C++11的发展历史

C++11 是 C++ 的第⼆个主要版本,并且是从 C++98 起的最重要更新。它引⼊了⼤量更改,标准化了既有实践,并改进了对 C++ 程序员可⽤的抽象。在它最终由 ISO 在 2011 年 8 ⽉ 12 ⽇采纳前,⼈们曾使⽤名称“C++0x”,因为它曾被期待在 2010 年之前发布。C++03 与 C++11 期间花了 8 年时间,故⽽这是迄今为⽌最⻓的版本间隔。从那时起,C++ 有规律地每 3 年更新⼀次。

2.列表初始化

2.1C++98传统的{}

C++98中的一般数组和结构体可以用{}进行初始化,而在C++11中对{}进行了延伸。

2.2C++11中的{}

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

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

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

4.C++11列表初始化的本意是想实现⼀个⼤统⼀的初始化⽅式,其次他在有些场景下带来的不少便

利,如容器push/inset多参数构造的对象时,{}初始化会很⽅便。

这就是C++11中对内置类型的支持,不过我们在日常使用中也不怎么这样用,这种了解一下即可。

主要是对自定义类型的支持有很大的改变:

这里我们创建一个Date类,此时我们就可以用第二张图的方式进行初始化。

这里本质是{2025,1,1}构造了一个Date的临时对象,临时对象又通过拷贝构造赋值给d1,但是我们之前也讲过,这里编译器会优化为直接构造:

可以看出并没有调用拷贝构造函数,只调用了构造函数。

像这种d2引用的就是{2024,7,25}产生的临时对象,这里加上const也是因为引用本身可以被修改,而临时对象具有常性,不能被修改,所以加上const就可以使引用的权限被缩小,变得不能被修改。

这里还需要注意的是在C++98中支持单参数的隐式类型转换,并且可以不加{}。

=符号在C++11中也是可以省略的,这种就看个人习惯了,但是必须要有{}的情况下才可以省略=符号。

像这种没有{},程序就会报错。

相较于有名对象和匿名对象传参,{}传参更有性价比。

2.3C++11中的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 }; // the type of il is an initializer_list ,这个类的本质是底层开⼀个数组,将数据拷⻉ 过来,std::initializer_list内部有两个指针分别指向数组的开始和结束。

通过调试我们可以看出 initializer_list中有两个指针_First和_Last来指向数组的开始和结束。

容器⽀持⼀个std::initializer_list的构造函数,也就⽀持任意多个值构成的 {x1,x2,x3...} 进⾏

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

并且 initializer_list是支持迭代器访问的,我们通过打印出迭代器的地址和栈上数据地址的比较可以看出,initializer_list所开辟的数组是在栈上的。

这里拿vector容器来演示,就可以通过 initializer_list来进行初始化,不过v1和v2在写法语义是不太一样的,v1是直接构造,v2是构造临时对象+临时对象拷贝复制v2,但是这步操作会被编译器优化为直接构造,这点大家要弄清楚。

而v3引用加const依旧是权限的问题,这里就不过多赘述了。

3.右值引用和移动语义

C++98的C++语法中就有引⽤的语法,⽽C++11中新增了右值引⽤语法特性,C++11之后我们之前学习的引⽤就叫做左值引⽤。⽆论左值引⽤还是右值引⽤,都是给对象取别名。

而在学习右值引用之前我们先认识一下左值和右值。

3.1左值和右值

左值 是⼀个表⽰数据的表达式(如变量名或解引⽤的指针),⼀般是有持久状态,存储在内存中,我

们可以获取它的地址,左值可以出现赋值符号的左边,也可以出现在赋值符号右边。定义时const修饰符后的左值,不能给他赋值,但是可以取它的地址。

https://www.dongchedi.com/article/7600833157193253401
https://www.dongchedi.com/article/7600834099257016856
https://www.dongchedi.com/article/7600832447063999000
https://www.dongchedi.com/article/7600832867085713945
https://www.dongchedi.com/article/7600831262563598873
https://www.dongchedi.com/article/7600831402183311897
https://www.dongchedi.com/article/7600832061917905470
https://www.dongchedi.com/article/7600832733291594264
https://www.dongchedi.com/article/7600831880816132632
https://www.dongchedi.com/article/7600831372500140568
https://www.dongchedi.com/article/7600830983973110297
https://www.dongchedi.com/article/7600830989874577944
https://www.dongchedi.com/article/7600829992859484697
https://www.dongchedi.com/article/7600831200579633688
https://www.dongchedi.com/article/7600828893398254104
https://www.dongchedi.com/article/7600829947162739225
https://www.dongchedi.com/article/7600830440379204158
https://www.dongchedi.com/article/7600830705475813950
https://www.dongchedi.com/article/7600829156548837913
https://www.dongchedi.com/article/7600828482650194457
https://www.dongchedi.com/article/7600829257937584702
https://www.dongchedi.com/article/7600829728349684248
https://www.dongchedi.com/article/7600828048296083993
https://www.dongchedi.com/article/7600829419913511486
https://www.dongchedi.com/article/7600826526896112152
https://www.dongchedi.com/article/7600825958186648089
https://www.dongchedi.com/article/7600826072481055257
https://www.dongchedi.com/article/7600826004273431065
https://www.dongchedi.com/article/7600826285178536472
https://www.dongchedi.com/article/7600825958186418713
https://www.dongchedi.com/article/7600825908014252569
https://www.dongchedi.com/article/7600826379294704190
https://www.dongchedi.com/article/7600826004273267225
https://www.dongchedi.com/article/7600826379294573118
https://www.dongchedi.com/article/7600825908014154265
https://www.dongchedi.com/article/7600825816129765913
https://www.dongchedi.com/article/7600826257907466814
https://www.dongchedi.com/article/7600825708680135193
https://www.dongchedi.com/article/7600826257907270206
https://www.dongchedi.com/article/7600825908013924889
https://www.dongchedi.com/article/7600825653575303705
https://www.dongchedi.com/article/7600763089105469977
https://www.dongchedi.com/article/7600825816129471001
https://www.dongchedi.com/article/7600825816129339929
https://www.dongchedi.com/article/7600761478211224089
https://www.dongchedi.com/article/7600826159441904190
https://www.dongchedi.com/article/7600763029579743806
https://www.dongchedi.com/article/7600763312351101465
https://www.dongchedi.com/article/7600755747886334488
https://www.dongchedi.com/article/7600758147854549566
https://www.dongchedi.com/article/7600825603486876185
https://www.dongchedi.com/article/7600711725914014233
https://www.dongchedi.com/article/7600708729394217534
https://www.dongchedi.com/article/7600825816129569305

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 4:31:15

亲测可用!GLM-4.6V-Flash-WEB中文理解能力真强

亲测可用&#xff01;GLM-4.6V-Flash-WEB中文理解能力真强 最近在做一批电商商品图的自动信息提取任务&#xff0c;需要从截图、菜单、包装盒照片里快速识别价格、规格、卖点等关键字段。试过好几款多模态模型——有的响应太慢&#xff0c;API调用要等3秒&#xff1b;有的对中…

作者头像 李华
网站建设 2026/6/15 15:03:20

ms-swift合并LoRA权重:生成独立模型文件的方法

ms-swift合并LoRA权重&#xff1a;生成独立模型文件的方法 在大模型微调实践中&#xff0c;LoRA&#xff08;Low-Rank Adaptation&#xff09;因其显存友好、训练高效、部署灵活等优势&#xff0c;已成为主流的参数高效微调方案。但一个常被忽视的关键环节是&#xff1a;如何将…

作者头像 李华
网站建设 2026/6/15 14:17:26

3大核心优势!py4DSTEM:4D-STEM科研效率工具全攻略

3大核心优势&#xff01;py4DSTEM&#xff1a;4D-STEM科研效率工具全攻略 【免费下载链接】py4DSTEM 项目地址: https://gitcode.com/gh_mirrors/py/py4DSTEM py4DSTEM是一款专为四维扫描透射电子显微镜&#xff08;4D-STEM&#xff09;数据设计的开源Python工具包&…

作者头像 李华
网站建设 2026/6/15 13:00:59

5个秘诀让你的设计效率提升300%:Fillinger智能填充实战手册

5个秘诀让你的设计效率提升300%&#xff1a;Fillinger智能填充实战手册 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts &#x1f3af; 核心功能概述&#xff1a;告别手动排版的时代…

作者头像 李华
网站建设 2026/6/15 13:00:51

GLM-4V-9B部署教程:Mac M2/M3芯片通过MLX适配运行方案

GLM-4V-9B部署教程&#xff1a;Mac M2/M3芯片通过MLX适配运行方案 你是不是也遇到过这样的问题&#xff1a;想在自己的Mac上跑多模态大模型&#xff0c;但发现官方GLM-4V-9B只支持CUDA环境&#xff0c;而Apple Silicon根本没有NVIDIA显卡&#xff1f;PyTorch报错、显存爆满、图…

作者头像 李华
网站建设 2026/6/15 13:01:26

Hunyuan-MT-7B-WEBUI体验分享:像搭积木一样简单

Hunyuan-MT-7B-WEBUI体验分享&#xff1a;像搭积木一样简单 你有没有过这样的经历&#xff1a;想试试最新的翻译模型&#xff0c;结果卡在环境配置上——装CUDA版本不对、PyTorch和transformers版本冲突、模型路径写错三次、最后连Web界面都打不开&#xff1f;更别说还要搞懂什…

作者头像 李华