刚刚结束的 C++ 标准委员会2019春季会议在夏威夷科纳举办,委员会在这次会议中确定了下一个国际标准 C++20 的全部特性,这标志着 C++20 的特性设计工作已完成。
按照 C++20 的发布计划,这次会议正是为了冻结 C++20 的特性而举办,进入特性冻结阶段(Feature freeze)意味着所有的功能特性将被冻结,并且不会再加入更多的新特性。
接下来我们看看上周会议确定添加至 C++20 草案的新特性:
● 模块化(Modules)
● 协程(Coroutines)
● static,thread_local 和 lambda capture 的结构化绑定
● std::polymorphic_allocator<>
● std::midpoint 和 std::lerp
● std::execution::unseq 执行策略
● std::ssize() 作为自由函数(free function)会返回符号大小(signed size)
● std::span 的可用性增强
● lookup 中新增预计算哈希值的功能(Precalculated hash values)
协程的加入应该是最大的惊喜了,值得期待!官方还表示,C++20 应该会是一个像 C++11 那样的大版本。
以下的特性已在本次会议或之前的会议上通过了批准,但尚未添加到 C++20 中,因为目前规范仍在编写中。它们有望在2019年7月的科隆会议上被加入,不过由于时间限制,可能无法完成所有工作。
● Expansion statements
● The C++20 synchronization library
● std::format
● constexpr std::vector
● Allow constexpr allocation,but disallow allocations that are not deleted at compile time
● constexpr std::type_info::operator==
● New conceptification of iterators
● Monadic operations for std::optional
● std::source_location
● std::flatmap
● std::flatset
● std::any_invocable
● std::ostream_joiner
● Stack trace library
● std::byteswap
● constinit
● Deprecating some uses of volatile
● Implicit creation of objects for low-level object manipulation
● using enum
下面的这些特性,早已在之前的会议上通过了批准:
● Concepts
● Contracts
● Ranges
● operator<=>A lot more constexpr features: consteval functions,std::is_constant_evaluated,constexpr union,constexpr try and catch,constexpr dynamic_cast and typeid
● ● std::span
● Synchronized output
● std::atomic_ref
按照计划的发布进度,C++20 预计将于明年夏季推出。
最后,看看 C++ 主要特性的开发进度。
自上次会议以来的变更:
名词解释
● IS = 国际标准。如 C++ 编程语言:C++11,C++14,C++17 等
● TS = 技术规范。在该阶段中,特性分支处于可使用状态,但尚未被所有厂商实现。如 Coroutines TS v1,Modules TS v1 等。
● CD = 委员会草案,即 IS/TS 的草案,用于给标准机构进行审查和反馈(”beta testing”)。
据透露,工具研究小组 SG15 决定创建一个 C++ 生态系统技术报告,该报告将描述新模块化 C++ 中工具(构建系统等)的最佳实践和最新技术。
C++20 最新进展:加入模块化和协程,进入特性冻结阶段
本文标题:C++20 最新进展:加入模块化和协程,进入特性冻结阶段
文章作者:Greedysky
发布时间:2020年02月20日 - 20时39分
最后更新:2022年11月28日 - 13时52分
原始链接:https://greedysky.github.io/2020/02/20/C++20最新进展/
许可协议: "署名-非商用-相同方式共享 3.0" 转载请保留原文链接及作者。
C++11 中智能指针的原理、使用、实现
C++ 建议用 nullptr 而不是 NULL
>