【新技术分享】C++17 最新进展
时间:2022-05-04
本文章向大家介绍【新技术分享】C++17 最新进展,主要内容包括C++17核心库文件、C++17库相关文件、库基本规范 第二版文件、并发规范、并行规范 v2、网络规范、范围规范、核心主题、库主题、Library Fundamentals TS v2 Issues、更多信息、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
C++标准委员会最近在夏威夷的科纳召开了一次会议,大家可能关心最新的进展,但是按照以往的情况,某些文件需要很久才会公开。会议进行的时候,大家都在忙着修订自己的文件,会议之后,大会会收集改好的文件,在几周之后发布。但是这一次,委员会修改了他们的系统,所以得到早些版本的文件非常简单,这些邮件就是公开的。
我从官方收集与组织了这些信息,没有任何我个人的主观评论。如果你想知道这次会议的主要内容,请阅读下面的内容(我已经知道了绝大多数关于C++17库的内容,但是要将其全部写出来还是需要一定的时间)
C++17核心库文件
- P0001R1 弃用
register
关键字 - P0002R1
bool
类型不再支持++
运算符 - P0012R1 异常成为类型系统的一部分,第五版
- P0061R1 支持
__has_include
- P0134R0 引入非静态成员变量的拷贝构造函数//not sure
- P0136R1 重写继承构造器(core issue 1941 et al)
- P0160R0 删除一元运算符的预设值//Wording for removing defaults for unary folds
C++17库相关文件
- P0004R1 弃用过时的
iostreams
的别名 - P0006R0 采用基于标准库规范的类型特征变量模板
- P0092R1 优化
- P0007R1 Constant View:一个::as_const 的辅助函数模板
- P0156R0 可变的lock_guard (Rev. 3)
- P0074R0 使std::owner_less更加灵活
- P0013R1 逻辑运算符类型特征 (revision 1)
库基本规范 第二版文件
- N4531 替换std::rand,版本三
- P0013R1 逻辑运算符类型特征 (revision 1)[C++17投票通过]
- 这些文件将会应用于N4529草案,然后进行拟议草案技术规范的投票。
并发规范
- P0159R0 将会作为并发技术规范发布,届时可能稍作改动。
并行规范 v2
- N4505草案和P0155R0的”Task Block R5”负责这项工作。
网络规范
- P0112R1草案负责这想工作。
范围规范
- P0021R0草案负责这项工作。
核心主题
- 1274.常见的非终结符表达式和内嵌初始化列表
- 1391.非推导模板参数到参数类型的转化
- 1722.lambda函数指针转换函数应该不例外吗?
- 1847.部分排序时声明一致性
- 1863.抛出对象的类型应该支持std::current_exception()
- 1949.”sequenced after”代替”sequenced before”
- 1975.允许声明异常类型
- 1981.隐式和显式的上下文转换
- 1990.decl-specifier-seq造成的歧义
- 2000.
#include
之外的头文件名称 - 2004.常量表达式中有可变成员的变量
- 2006.Cv-qualified的void类型
- 2015.虚函数的odr-use
- 2016.类型转换函数的描述中可能存在的歧义
- 2019.存储时间描述中成员引用的省略
- 2024.依赖类型和未解包的参数包
- 2026.Zero-initialization和constexpr
- 2027.指定多个alignas的需求不明
- 2031.
&&
的不兼容 - 2052.模板参数推导vs重载操作符
- 2075.传递短初始化列表给数组引用参数
- 2101.对类型和值的依赖的错误说明
- 2120.数组作为标准布局类的第一个非静态成员变量
库主题
- 1169.
num_get
不能和strto*完全兼容 - 2072.缓冲区容量定义不明确
- 2101.一些类型转换可能产生非预期的类型
- 2111.处理异常时可能调用那些已经删除的句柄?
- 2119.扩展int类型缺少哈希函数
- 2127.带raw_storage_iterator的Move-construction
- 2133.重载逗号迭代器
- 2156.无序容器的reserve(n)保存的是n-1个元素
- 2218.容器如何使用allocator_traits::construct()不够明确
- 2219.INVOKE-ing一个带有reference_wrapper的指针作为对象表达式
- 2224.不活跃对象的状态问题
- 2234.assert()应该允许在常亮表达式中使用
- 2244.关于basic_istream::seekg的issue
- 2250.Library Issue 2207中的Follow-up
- 2259.17.6.5.5规则中有关成员函数的问题
- 2273.regex_match的歧义
- 2336.is_trivially_constructible/is_trivially_assignable结果永远是false
- 2353.std::next限制过度
- 2367.pair和tuple无参数时不兼容is_constructible
- 2380.
<cstdlib>
应该提供long ::abs(long) 和long long ::abs(long long)吗? - 2384.分配器的解除函数需要更好的规范
- 2385.function::assign分配器参数无意义
- 2435.reference_wrapper::operator()的标记应该是被删除
- 2447.分配器和volatile-qualified值类型
- 2462.
std::ios_base::failure
被过度规范 - 2466.
allocator_traits::max_size()
默认表现是错误的 - 2469.map的[]操作符和unordered_map规则错误
- 2473.
basic_filebuf
对C文件的兼容 - 2476.
scoped_allocator_adaptor
是不可分配的 - 2477.
std::vector::erase()
和std::deque::erase()
的不一致 - 2483.
throw_with_nested()
应该使用is_final - 2484.
rethrow_if_nested()
是不可实现的 - 2485.常量tuple&&应该重载get()
- 2486.
mem_fn()
应该提供向前兼容 - 2487.
bind()
不应该是cv-overloaded, 而应该是const-overloaded - 2489.
mem_fn()
应该是noexcept的 - 2492.明确comp的需求
- 2495.没有类似异常安全元素的东西
Library Fundamentals TS v2 Issues
- 2494.[fund.ts.v2] ostream_joiner应该是noexcept的
- 2500.[fund.ts.v2] fundts.memory.smartptr.shared.obs/6 应该适用于cv-unqualified void
- 2515.[fund.ts.v2]observer_ptr的确定操作符不能匹配任何简介
- 2517.[fund.ts.v2] 两个propagate_const assignment 操作符返回不正确的类型
- 2526.[fund.ts]experimental::function::swap 条件不正确
更多信息
以上只是投票通过的部分记录。每次的会议都会涉及很多工作,不会全都反映在文件上,比如,有关modules的热烈讨论文件中就没有。虽然我几乎花了所有的时间在库工作组中,但是还是不能跟进所有的内容。最终版文件我会在Reddit分享各个模块的进展。
原文链接:https://linux.cn/article-6563-1.html
- 学习HTML5之表单
- 基于jQuery的ajax对WebApi和OData的封装我们还是先来看看要求在看看目标:思路封装方式
- js的动态加载、缓存、更新以及复用(四)
- ajax的再次封装!(改进版) —— new与不 new 有啥区别?
- ajax的再次封装!
- 【自然框架】js版的QuickPager分页控件 V2.0
- 你的SQL语句放在了哪里?
- oclhashcat:离线hash密码破解工具官方文档(中文版)
- 如何动态加载js?
- 【自然框架】数据访问之精雕细琢(一)存储过程的参数
- 100w条记录分页,可以有多快?—— DataReader分页与SQL语句分页的对比测试(在线演示)
- Mimikatz小实验:黄金票据+dcsync
- 【自然框架】n级下拉列表框的原理
- 【自然框架】分享 n级联动下拉列表框
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android实现中轴旋转特效 Android制作别样的图片浏览器
- Android使用DrawerLayout实现双向侧滑菜单
- Android实现3D推拉门式滑动菜单源码解析
- Android编程处理窗口控件大小,形状,像素等UI元素工具类
- Android开发实现的Log统一管理类
- Android中可以作为Log开关的一些操作及安全性详解
- 实例详解Android Webview拦截ajax请求
- Android给布局、控件加阴影效果的示例代码
- XListView实现下拉刷新和上拉加载原理解析
- Android实现QQ侧滑(删除、置顶等)功能
- Android通过XListView实现上拉加载下拉刷新功能
- Android自定义View实现圆形切图效果
- Android仿iOS侧滑退出当前界面功能
- android仿支付宝密码输入框效果
- TextInputLayout输入框控件的悬浮标签