cpp c++ 11/14/17
https://mp.weixin.qq.com/s/RYS7YGaeuImcCXzkVhAYJg
我们常用的c++,你对它的标准了解多少呢?本文就带你一探c++11新标准。官网链接:https://msdn.microsoft.com/zh-cn/library/hh567368.aspx#featurelist
C++11 功能列表
C++11 核心语言功能表
C++11 核心语言功能表:并发
C++11 核心语言功能:C99
C++ 14 核心语言功能
C++17 建议的核心语言功能
功能表指南
右值引用
Lambdas
decltype
强类型/前向声明枚举
对齐方式
标准布局和普通类型
默认函数和已删除的函数
override 和 final
原子化及更多信息
C99 func 和预处理器规则
标准库功能
C++11 功能列表
C++11 核心语言功能表
C++11 核心语言功能 | Visual Studio 2010 | Visual Studio 2012 | Visual Studio 2013 | Visual Studio 2015 |
---|---|---|---|---|
右值引用 v0.1、v1.0、v2.0、v2.1、v3.0 | 2.0 版 | 2.1* 版 | 2.1* 版 | v3.0 |
引用限定符 | 否 | 否 | 否 | 是 |
非静态数据成员初始值设定项 | 否 | 否 | 是 | 是 |
可变参数模板 v0.9、v1.0 | 否 | 否 | 是 | 是 |
初始值设定项列表 | 否 | 否 | 是 | 是 |
static_assert | 是 | 是 | 是 | 是 |
auto v0.9、v1.0 | v1.0 | v1.0 | v1.0 | 是 |
结尾返回类型 | 是 | 是 | 是 | 是 |
Lambdas v0.9、v1.0、v1.1 | v1.0 | v1.1 | v1.1 | 是 |
decltype v1.0、v1.1 | v1.0 | v1.1** | v1.1 | 是 |
右尖括号 | 是 | 是 | 是 | 是 |
函数模板的默认模板参数 | 否 | 否 | 是 | 是 |
表达式 SFINAE | 否 | 否 | 否 | 否 |
别名模板 | 否 | 否 | 是 | 是 |
Extern 模板 | 是 | 是 | 是 | 是 |
nullptr | 是 | 是 | 是 | 是 |
强类型的枚举 | 部分 | 是 | 是 | 是 |
前向声明枚举 | 否 | 是 | 是 | 是 |
特性 | 否 | 否 | 否 | 是 |
constexpr | 否 | 否 | 否 | 是 |
对齐方式 | TR1 | 部分 | 部分 | 是 |
委托构造函数 | 否 | 否 | 是 | 是 |
继承构造函数 | 否 | 否 | 否 | 是 |
显式转换运算符 | 否 | 否 | 是 | 是 |
char16_t/char32_t | 否 | 否 | 否 | 是 |
Unicode 字符串文本 | 否 | 否 | 否 | 是 |
原始字符串文本 | 否 | 否 | 是 | 是 |
文本中的通用字符名 | 否 | 否 | 否 | 是 |
用户定义的文本 | 否 | 否 | 否 | 是 |
标准布局和普通类型 | 否 | 是 | 是 | 是 |
默认函数和已删除的函数 | 否 | 否 | 是* | 是 |
扩展的友元声明 | 是 | 是 | 是 | 是 |
扩展的 sizeof | 否 | 否 | 否 | 是 |
内联命名空间 | 否 | 否 | 否 | 是 |
无限制的联合 | 否 | 否 | 否 | 是 |
作为模板参数的本地和未命名类型 | 是 | 是 | 是 | 是 |
基于范围的 for 循环 | 否 | 是 | 是 | 是 |
override 和 final v0.8、v0.9、v1.0 | 部分 | 是 | 是 | 是 |
最低 GC 支持 | 是 | 是 | 是 | 是 |
noexcept | 否 | 否 | 否 | 是 |
C++11 核心语言功能表:并发
C++11 核心语言功能:并发 | Visual Studio 2010 | Visual Studio 2012 | Visual Studio 2013 | Visual Studio 2015 |
---|---|---|---|---|
改写的序列点 | 不可用 | 不可用 | 不可用 | 是 |
原子 | 否 | 是 | 是 | 是 |
强比较和交换 | 否 | 是 | 是 | 是 |
双向界定 | 否 | 是 | 是 | 是 |
内存模型 | 不可用 | 不可用 | 不可用 | 是 |
数据依赖项排序 | 否 | 是 | 是 | 是 |
数据依赖项排序:函数批注 | 否 | 否 | 否 | 是 |
exception_ptr | 是 | 是 | 是 | 是 |
quick_exit | 否 | 否 | 否 | 是 |
信号处理程序中的原子化 | 否 | 否 | 否 | 否 |
线程本地存储区 | 部分 | 部分 | 部分 | 是 |
神奇的静态对象 | 否 | 否 | 否 | 是 |
C++11 核心语言功能:C99
C++11 核心语言功能:C99 | Visual Studio 2010 | Visual Studio 2012 | Visual Studio 2013 | Visual Studio 2015 |
---|---|---|---|---|
__func__ | 部分 | 部分 | 部分 | 是 |
C99 预处理器 | 部分 | 部分 | 部分 | 部分 |
long long | 是 | 是 | 是 | 是 |
扩展的整型 | 不可用 | 不可用 | 不可用 | 不可用 |
[本文内容]
C++ 14 核心语言功能
功能 | Visual Studio 2013 | Visual Studio 2015 |
上下文转换的已调整 workding | 是 | 是 |
二进制文本 | 否 | 是 |
auto 和 decltype(auto) 返回类型 | 否 | 是 |
init-capture | 否 | 是 |
泛型 lambda | 否 | 是 |
变量模板 | 否 | 否 |
扩展的 constexpr | 否 | 否 |
聚合的 NSDMI | 否 | 否 |
避免/合成分配 | 否 | 否 |
[已弃用] 特性 | 否 | 否 |
大小经过调整的分配 | 否 | 是 |
数字分隔符 | 否 | 是 |
C++17 建议的核心语言功能
功能 | Visual Studio 2013 | Visual Studio 2015 |
针对自动使用大括号内的初始值设定项列表的新建规则 | 否 | 否 |
简要静态断言 | 否 | 否 |
模板-参数模板的类型名称 | 否 | 否 |
删除三字符组 | 是 | 是 |
嵌套的命名空间定义 | 否 | 否 |
N4259 std::uncaught_exceptions() | 否 | 否 |
N4261 修复限定转换 | 否 | 否 |
N4266 命名空间和枚举器的特性 | 否 | 否 |
N4267 u8 字符文本 | 否 | 否 |
N4268 允许更多非类型模板参数 | 否 | 否 |
N4295 Fold 折叠表达式 | 否 | 否 |
等待/继续 | 否 | 是 |
功能表指南
右值引用
说明 |
---|
以下描述中的版本标识符(v0.1、v1.0、v2.0、v2.1、v3.0)仅用来演示 C++11 的发展。 标准本身不会使用它们。 |
“右值引用 v3.0”将添加新规则,以在特定条件下自动生成移动构造函数和移动赋值运算符。 这是在 Visual Studio 2015 中实现的。
Lambdas
在 lambda 函数选入到工作文件(“0.9”版)并且已添加可变的 lambda(“1.0”版)之后,标准化委员会全面修订了措词。 这产生了 lambda“1.1”版,这个版本现在已完全受支持。 lambda 1.1 版的措词阐明了在特殊案例(例如引用静态成员或嵌套 lambda)中会发生的情况。 这将修复由复杂 lambda 触发的问题。 此外,无状态的 lambda 现在可转换为函数指针。 这没有包含在 N2927 措词中,但是无论如何都会将它计作 lambda 1.1 版的一部分。C++11 5.1.2 [expr.prim.lambda]/6 具有以下说明:“无 lambda-capture
的 lambda-expression
的闭包类型使用一个公共的非虚拟、非显式常量转换函数指向一个具有与闭包类型的函数调用运算符相同的参数和返回类型的函数。 此转换函数返回的值应为一个函数的地址,调用该函数时,其效果和调用闭包类型的函数调用运算符相同。” (Visual Studio 2012 中的 Visual C++ 实现的效果甚至更好,因为它使无状态的 lambda 可转换为具有任意调用约定的函数指针。 当你在使用期待像 __stdcall
函数指针这类对象的 API 时,这点很重要。)
[本文内容]
decltype
在 decltype 选入到工作文件(1.0 版)后,在最后时刻收到了一个小的但很重要的修复(1.1 版)。 这对从事 STL 和 Boost 工作的程序员很有好处。
强类型/前向声明枚举
对齐方式
标准布局和普通类型
作为此更改的副作用,标识用例不再起作用(common_type<T>
并不总是产生 T
类型)。 这将遵循建议的解决方法,但其将中断依赖于先前行为的所有代码。
template <typename T> struct Identity { typedef T type; };
说明 |
---|
有关其他重大更改,请参阅Visual C++ 2015 中的重大更改。 |
默认函数和已删除的函数
override 和 final
这经历了短暂而复杂的发展。 最初,在 0.8 版中,具有 [[override
]]、[[hiding
]] 和 [[base_check
]] 特性。 然后在 0.9 版中,消除了这些特性并将其替换为上下文关键字。 最后,在 1.0 版中,将它们精简为类的“final
”以及函数的“override
”和“final
”。 这使它成为一个获得提升的扩展,因为 Visual Studio 2010 中的 Visual C++ 已支持对函数使用此“override
”语法,并且语义相当接近于 C++11 中的语义。 “final
”也受支持,但拼写不同(“sealed”)。 现在完全支持“override
”和“final
”的标准拼写和语义。 有关详细信息,请参阅 override 说明符 和 final 说明符。
[本文内容]
原子化及更多信息
原子化、强比较和交换、双向界定和数据依赖项排序指定现在已实现的标准库机制。
C99 __func__ 和预处理器规则
C++11 核心语言功能:C99 表列出了两个项的“部分”实现。 对于预定义标识符 __func__
,列出“分部”,因为对非标准扩展 __FUNCDNAME__
、__FUNCSIG__
和 __FUNCTION__
提供了支持。 有关详细信息,请参阅 预定义的宏。 对于 C99 预处理器规则,列出“分部”,因为支持可变参数宏。 有关详细信息,请参阅 Variadic 宏。
[本文内容]
标准库功能
下面列出了 Visual Studio 2012 中的 Visual C++ 和 Visual Studio 2013 中的 Visual C++ 中的部分更改:
Visual Studio 2012 中的 Visual C++ 在下列方面超出了 C++11 的范围:
Visual Studio 2013 中的 Visual C++ 实现一些关键的 C++ 14 库功能:
“透明运算符函子”
less<>
、greater<>
、plus<>
、multiplies<>
等。make_unique<T>(args...)
和make_unique<T[]>(n)
cbegin()
/cend()
、rbegin()
/rend()
和crbegin()
/crend()
非成员函数
cpp c++ 11/14/17相关推荐
- C++11\14\17\20 特性介绍
C++11 新特性 #01 auto 与 decltype auto: 对于变量,指定要从其初始化器⾃动推导出其类型.⽰例: auto a = 10; // 自动推导 a 为 int auto b = ...
- C++11/14/17 新特性总结
C++11/14/17 新特性总结 initializer_list std::vector<int> vctInts({92, 12, 39, 46, 92, 84, -1, 0, -2 ...
- VS2010-2015对C++11/14/17特性的支持
VS2010-2015对C++11/14/17特性的支持 C++11 功能列表 Visual C++ 实现了 C++11 核心语言规范 中的绝大多数功能.许多 C++14 库功能和某些为 C++17 ...
- 支持 C++11/14/17 功能(现代 C++
支持 C++11/14/17 功能(现代 C++) 若要了解有关 Visual Studio 2017 RC 的最新文档,请参阅 Visual Studio 2017 RC 文档. 本文描述了 Vis ...
- Effective Modern C++ 第一章 C++11/14/17中的类型推断
Chapter 1, Deducing Type Item 1: Template type deduction 一些基础知识: 关于左值和右值的一些解释:https://book.2cto.com/ ...
- C++11\14\17\20 新特性整理
文章目录 C++11 新特性 01 auto 与 decltype 02 defaulted 与 deleted 函数 03 final 与 override 04 尾置返回类型 05 右值引⽤ 06 ...
- 2021年最新整理, C++ 学习资料,含C++ 11 / 14 / 17 / 20 / 23 新特性、入门教程、推荐书籍、优质文章、学习笔记、教学视频等
- 11.14/11.15 Apache和PHP结合 11.16/11.17 Apache默认虚拟主机
2019独角兽企业重金招聘Python工程师标准>>> 11.14-11.15 Apache和PHP结合 Apache(httpd)的配置文件:/usr/local/apache2. ...
- linux之让终端支持C++11/14编译cpp文件
1 问题 我们的项目很多智能指针,但是我linux的终端肯定不支持C++11/14, 我们平时都是用的下面的命令编译c++文件 g++ -g file.cpp -o file r 如果是用c++11 ...
最新文章
- PicoBlaze 8 位微控制器
- boost::python::long_相关的测试程序
- 查询oracle表上重复的数据库,如何确定Oracle数据库表重复的记录
- jmeter学习笔记(八-1)
- 学习笔记 - 002
- Java 8 vs. Scala(二):Stream vs. Collection
- 2022软件测试技能 Jmeter+Ant+Jenkins持续集成并生成测试报告教程
- 架构师须知概念:POJO、PO、DTO、DAO、BO、VO
- 百度网盘四种方法免费提速
- 安装Ubuntu18.10并安装华硕AC57无线网卡驱动
- QQ返利当当特惠活动(10.26~11.4)
- $(div /)代表的意思
- matlab 分类学习工具箱 Classification Learner
- 为什么光合作用要叶绿素?
- 积木开发系列----Blockly初体验
- VMware部分产品
- Qt实战:Qt5.11.1安装与MSVC配置
- 【朴素贝叶斯】深入浅出讲解朴素贝叶斯算法(公式、原理)
- wpa-supplicant移植
- 32位系统利用ReadyFor4GB扩大大于4G的内存
热门文章
- ajax--异步请求
- 【UOJ#386】【UNR#3】鸽子固定器(贪心)
- 第5章 字典之物品清单
- 实战讲述Flutter跨平台框架应用,帮你突破瓶颈
- 计算机打数据执行保护删除不掉,运行某应用程序时,出现数据执行保护 (DEP)提示的解决方案...
- 键盘win键无法使用,win+r不生效、win键没反应、Windows键失灵万能解决方案
- JVM虚拟机的理解(上)
- DSP_TMS320F28335_PIE学习笔记
- Cognitive Complexity of methods should not be too high Refactor this method to reduce its Cognitive
- compat-wireles的理解