| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C++11后面引入的新特性(一) -> 正文阅读 |
|
[C++知识库]C++11后面引入的新特性(一) |
?最近工作中,遇到一些问题,使用C++11实现起来会更加方便,而线上的生产环境还不支持C++11,于是决定新年开工后,在组内把C++11推广开来,整理以下文档,方便自己查阅,也方便同事快速上手。(对于异步编程十分实用的Future/Promise以及智能指针等,将不做整理介绍,组内使用的框架已经支持并广泛使用了,用的是自己公司参考boost实现的版本)目前C++版本已经C++23,本次我们主要介绍c++11版本引入的新特性
? 本次是一次较大的改动,我?将要对上面一些特殊特性,重要的加以详细说明和用法
nullptr 出现的目的是为了替代 NULL。 在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0。 C++ 不允许直接将 void * 隐式转换到其他类型,但如果 NULL 被定义为 ((void*)0),那么当编译char *ch = NULL;时,NULL 只好被定义为 0。 而这依然会产生问题,将导致了 C++ 中重载特性会发生混乱,考虑:
对于这两个函数来说,如果 NULL 又被定义为了 0 那么 foo(NULL); 这个语句将会去调用 foo(int),从而导致代码违反直观。 为了解决这个问题,C++11 引入了 nullptr 关键字,专门用来区分空指针、0。 nullptr 的类型为 nullptr_t,能够隐式的转换为任何指针或成员指针的类型,也能和他们进行相等或者不等的比较。 当需要使用 NULL 时候,养成直接使用 nullptr的习惯。 ? ? ? 2. 类型推导C++11 引入了 auto 和 decltype 这两个关键字实现了类型推导,让编译器来操心变量的类型 ?对于变量,指定要从其初始化器自动推导出其类型。
? auto 使用 auto 进行类型推导的一个最为常见而且显著的例子就是迭代器。在以前我们需要这样来书写一个迭代器:
而有了 auto 之后可以:?
decltypedecltype 关键字是为了解决 auto 关键字只能对变量进行类型推导的缺陷而出现的。 检查实体的声明类型,或表达式的类型和值类别。 语法
在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值。
从 C++14 开始是可以直接让普通函数具备返回值推导,因此下面的写法变得合法:
运行代码后,此时用的编译器Gcc9.2(2a)?
Lambda表达式C++11新标准新增的一项重要功能就是lambda表达式,所谓lambda就是表示一个可调用的代码单元,也可以说是一个可调用对象,还可以理解为一个没有命名的内联函数。Lambda的组成结构与函数很相似,它拥有一个返回类型,一个形参列表,一个函数体。Lambda也可以定义在函数内部。它的组成结构如下:
Lambda表达式称为匿名函数,所谓匿名函数,有以下两方面的含义
既然功能和普通函数一样,那么C++11为什么还要引入Lambda表达式呢?相比普通函数,Lambda表达式有以下优点 捕获的举例如下:
? ?标号2:函数参数
Lambda表达式的实质Lambda实质是类,通过下面的例子可以很多认识到Lambda表达式和普通函数的不同
?上述代码中,第二次调用f是,f内部的变量x保留了上次的值。其实,Lambda实质是类,而f是类的实例,x是f的成员变量,多次调用f,调用的是同一个实例,这是和普通函数本质不同的地方。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 12:03:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |