一起来看看,C++11标准,那些超实用的新特性有哪些?

C++11标准是 ISO/IEC 14882:2011 - Information technology -- Programming languages -- C++ 的简称,也称为C++0x。它由国际标准化组织(ISO)和国际电工委员会(IEC)旗下的C++标准委员会(ISO/IEC JTC1/SC22/WG21)于2011年8月12日公布,并于2011年9月正式出版。

C++11标准对C++98标准做了重大的修正和改进。C++11标准引入了许多新特性,主要包括以下几个方面:

01 智能指针:

C++11引入了智能指针,用于自动管理动态分配的内存。智能指针主要有三种类型:std::unique_ptr(独占智能指针)、std::shared_ptr(共享智能指针或引用计数智能指针)和std::weak_ptr(观察者智能指针)。这些智能指针在超出作用域时会自动释放内存,从而避免了内存泄漏和悬挂指针的问题。

#include <memory>// 自定义类
class MyClass;// 创建一个std::shared_ptr智能指针对象。
std::shared_ptr<MyClass> pMyClass = std::make_shared<MyClass>();

02 线程库:

C++11引入了线程库,用于支持多线程编程。线程库提供了多种类和函数,包括std::thread(线程类)、std::mutex(互斥类)、std::condition_variable(条件变量类)等,用于创建和管理线程、同步线程以及等待线程完成等操作。

03 随机数生成器:

C++11引入了随机数生成器,用于生成各种类型的随机数。随机数生成器位于头文件中,主要包括std::random_device、std::mt19937和各种分布函数。下面看一个生成随机数的例子:

#include <random>// 生成随机数例子。
std::random_device rd;
std::mt19937 gen(rd());
int iValue = gen();    // 生成随机数

04 基于范围for循环:

C++11引入了基于范围for循环(range-based for loop),用于遍历数组、容器等数据结构。范围for循环的语法如下:

// 语法:
for (auto element : container) {// 循环体
}
// 其中,container是要遍历的容器,element是容器中的每个元素。// 例子:
#include <vector>
std::vector<int> vecDatas;
for (int v : vecDatas)
{// 循环体
}

05 lambda表达式:

C++11引入了lambda表达式,用于定义匿名函数。lambda表达式可以捕获其所在作用域中的变量,并使用这些变量在lambda函数体中定义操作。以下是一个lambda表达式的使用例子:

#include <vector>
#include <algorithm>// 创建一个存储int的动态数组vector。
std::vector<int> vecValues{22,33,11};// 利用lambda表达式对vector降序排序。
std::sort(vecValues.begin(), vecValues.end(), [](int a, int b){return a > b;}
);

06 右值引用和移动语义:

C++11引入了右值引用和移动语义,用于优化资源管理。右值引用和移动语义可以避免资源泄漏和拷贝操作,提高程序的性能和安全性。

07 类型推导:

C++11引入了类型推导(type deduction),使用关键字auto来自动推导变量的类型。这可以提高代码的可读性和可维护性。

#include <map>
#include <string>std::map<int, std::string> mapD​atas;
// ...// 以下auto使用自动推导特性。
auto iter = mapD​atas.find(1);
if (mapD​atas.end() != iter)
{// ...
}

08 追踪返回类型:

C++11引入了追踪返回类型(trailing return type),允许在函数声明中指定返回类型,而不是在函数名之前。这可以提高代码的可读性和可维护性。

09 nullptr:

C++11引入了新的空指针常量nullptr,用于表示空指针。nullptr比NULL更加安全,因为它是一个常量表达式,不能被隐式转换为整数类型。记得以后不要再使用NULL了。

// 自定义类
class MyClass;// 类指针初始nullptr
MyClass* pMyClass = nullptr;

10 长整数类型:

C++11引入了新的长整数类型long long(64位长整数),它能够表示比int和long类型更大的整数。

11 静态断言:

C++11引入了静态断言static_assert,用于在编译时检查条件是否为真。如果条件为假,则编译器会生成错误信息。

12 外部模板:

C++11引入了外部模板(extern template),允许在头文件中声明模板,并在其他文件中定义它们。这可以提高编译速度并减少重复代码。

13 列表初始化:

C++11引入了列表初始化语法(list initialization),允许使用大括号{}来初始化变量和容器。这种语法比传统的赋值语法更加清晰和安全。来看几个例子:

#include <map>
std::map<int, float> mapDatas;// 传统方式插入数据
mapDatas.insert(std::pair<int, float>(1, 1.25));
// 或者下面这种
mapDatas.insert(std::make_pair(1, 1.25));// C++11方式插入数据
mapDatas.insert( { 1, 1.25 } );// 传统的初始化
double dValue = 1.25;
// C++11支持这种初始化
double dValue {1.25};

14 新容器:

C++11引入了一些新的容器,包括std::unordered_map(无序关联容器,基于哈希表实现)、std::unordered_set(无序集合,基于哈希表实现)、std::forward_list(单向链表)等。这些容器提供了更加灵活和高效的数据结构选择。

15 新算法:

C++11引入了一些新的算法,如std::copy_if、std::move_if等,用于执行特定的操作。

16 并行算法:

C++11开始支持并行算法,可以利用多核处理器进行计算加速。一些标准算法如sort,、find等已经支持并行版本。

C++11标准是C++编程语言的重要里程碑之一,为开发者提供了更强大和灵活的工具,以应对现代软件开发中的各种挑战。这里只列出一些相对实用的C++11标准,更多标准特性与描述,请查看国际标准化组织(ISO)官网介绍。

-【End】-

#想了解更多精彩内容,关注下方公众号,还有示例源码、开发工具免费下载。

喜欢本文章,记得点赞、分享、关注哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/419536.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Scrapy 爬取“http://tuijian.hao123.com/”网页中左上角“娱乐”、“体育”、“财经”、“科技”、历史等名称和URL

一、网页信息 二、检查网页&#xff0c;找出目标内容 三、根据网页格式写正常爬虫代码 from bs4 import BeautifulSoup import requestsheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/53…

一.Winform使用Webview2(Edge浏览器核心) 创建demo(Demo1)实现回车导航到指定地址

Winform使用Webview2(Edge浏览器核心) 创建demo(Demo1)实现回车导航到指定地址 参考文档 WinForms 应用中的 WebView2 入门 实现 1.安装visual studio 按照官方文档一路操作&#xff0c;可以自行百度或者查看WinForms 应用中的 WebView2 入门。为了避坑&#xff0c;本人安…

《游戏-02_2D-开发》

基于《游戏-01_2D-开发》&#xff0c; 继续制作游戏&#xff1a; 首先给人物添加一个2D重力效果 在编辑的项目设置中&#xff0c; 可以看出unity默认给的2D重力数值是-9.81&#xff0c;模拟现实社会中的重力效果 下方可以设置帧率 而Gravity Scale代表 这个数值会 * 重力 还…

WorkPlus Meet私有化视频会议软件-构建安全高效的内网会议体验

在企业内部&#xff0c;高效的会议协作是推动团队协同和工作效率的关键。而内网会议系统成为了构建安全高效的内部会议体验的必要工具。作为一家领先的内网会议系统&#xff0c;WorkPlus Meet以其卓越的性能和智能化的功能&#xff0c;助力企业实现高效安全的内部会议体验。 为…

【图解数据结构】顺序表实战指南:手把手教你详细实现(超详细解析)

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;图解数据结构、算法模板 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️线性表1.1 &#x1f514;线性表的定义1.2 &#x1f514;线性表的存储结构 二. ⛳️顺序表…

P2P DMA并不是所有场景都会有性能提升

P2P (Peer-to-Peer) DMA技术理论上可以带来性能提升&#xff0c;特别是在特定的工作负载和场景下。例如&#xff0c;当两个高速设备&#xff08;如GPU与NVMe SSD&#xff09;需要频繁进行大量数据交换时&#xff0c;通过P2P DMA&#xff0c;数据可以直接在设备间传输&#xff0…

Three.js 学习笔记之模型(学习中1.20更新) | 组 - 模型 - 几何体 - 材质

文章目录 模型 几何体 材质层级模型组- THREE.Group递归遍历模型树结构object3D.traverse() 模型点模型Points - 用于显示点线模型Line | LineLoop | LineSegments网格模型mesh - 三角形网格模型独有的属性与方法 几何体BufferGeometry缓冲类型几何体BufferGeometry - 基类创…

Servlet系列:两种创建方式(xml,注解)

一、使用web.xml的方式配置&#xff08;Servlet2.5之前使用&#xff09; 在早期版本的Java EE中&#xff0c;可以使用XML配置文件来定义Servlet。在web.xml文件中&#xff0c;可以定义Servlet的名称、类名、初始化参数等。然后&#xff0c;在Java代码中实现Servlet接口&#x…

中国电子学会2022年6月份青少年软件编程Scratch图形化等级考试试卷一级真题

一、单选题(共25题&#xff0c;共50分) 1.广场中有声控喷泉&#xff0c;当声音的音量大于60的时候&#xff0c;喷泉就会喷出水&#xff0c;现在的音量为30&#xff0c;下列哪个选项可以让喷泉喷出水&#xff1f;&#xff08;2分&#xff09; A. B. C. D. 答案解析&#x…

接口测试 02 -- JMeter入门到实战

前言 JM eter毕竟是做压测的工具&#xff0c;自动化这块还是有缺陷。 如果公司做一些简单的接口自动化&#xff0c;可以考虑使用JMeter快速完成&#xff0c;如果想做完善的接口自动化体系&#xff0c;建议还是基于Python来做。 为什么学习接口测试要先从JMeter开始&#xff1f;…

BaiJiaCms 漏洞挖掘

今天来和大家讲一下baijiacms的漏洞挖掘&#xff0c;小编一般都是黑盒测试&#xff0c;没有对其代码审计&#xff0c;&#xff08;等小编把常见的漏洞都了解一下在进行代码审计&#xff09; 1.存储型XSS 首先需要进入管理员账号 找到一个“调用第三方统计代码”的方框&#xf…

Unity中URP下的SimpleLit的 Lambert漫反射计算

文章目录 前言一、Lambert漫反射计算11、MixRealtimeAndBakedGI 函数有三个重载2、3号 调用了 2号3、1号调用了 SubtractDirectMainLightFromLightmap函数4、我们重点来看 Lambert漫反射的实现部分5、其余部分 二、Lambert漫反射计算21、LightingLambert 前言 在之前的文章中&…