C++17
来自cppreference.com
< cpp
C++17 是小版本 C++14 之后的一个大版本,它提供了新的语言和库功能特性。该标准于 2017 年 12 月发布。
下列特性被合并入 C++17:
- 来自文件系统 TS:文件系统库
- 来自库基础 v1 TS:std::any、std::optional、std::string_view、std::apply、多态分配器、搜索器等等
- 来自库基础 v2 TS:std::void_t、std::conjunction、std::disjunction、std::negation、std::not_fn、std::gcd、std::lcm
- 来自并行 v1 TS:执行策略、std::reduce、std::inclusive_scan、std::exclusive_scan 等等,但不包括
exception_list - 来自数学特殊函数 IS:数学特殊函数
- 来自 C11:std::aligned_alloc、std::timespec_get
| 本节未完成 |
过时特性
已移除特性
- std::auto_ptr
- 已弃用的函数对象
- std::random_shuffle
- std::unexpected
- 过时的
iostream别名 - 三标符
- register 关键字
bool类型的自增操作- 动态异常说明
弃用特性
- std::iterator
- std::raw_storage_iterator
- std::get_temporary_buffer
- std::is_literal_type
- std::result_of
- 整个 <codecvt> 头文件
新的语言特性
u8字符字面量- 将 noexcept 作为类型系统的一部分
- 新的求值顺序规则
- lambda 表达式捕获
*this
- 命名空间
- 简化的嵌套命名空间
using声明语句可以声明多个名称- 属性命名空间不必重复
- 新属性:
[[fallthrough]][[maybe_unused]][[nodiscard]]
- __has_include
新的头文件
新的库特性
工具类型
- std::tuple:
- std::apply
- std::make_from_tuple
- 推导指引
- std::any
- std::optional
- std::variant
- 搜索器
- std::as_const
- std::not_fn
内存管理
- 未初始化内存算法
- std::destroy_at
- std::destroy
- std::destroy_n
- std::uninitialized_move
- std::uninitialized_value_construct
- weak_from_this
- std::pmr::memory_resource 与 std::pmr::polymorphic_allocator
- std::aligned_alloc
- 通透的 std::owner_less
- std::shared_ptr 的数组支持
- 带有显式对齐的分配函数
编译时编程
- std::byte
- std::conjunction/std::disjunction/std::negation
- 类型特征变量模板(
xxx_v,如 std::is_same_v) - std::is_swappable
- std::is_invocable
- std::is_aggregate
- std::has_unique_object_representations
算法
- std::clamp
- 并行算法与执行策略
- std::inclusive_scan
- std::exclusive_scan
- std::gcd
- std::lcm
- std::reduce
迭代器与容器
- map/set extract 与 map/set merge
- map/unordered_map try_emplace 与 insert_or_assign
- 连续迭代器(老式连续迭代器 (LegacyContiguousIterator) )
- 非成员 std::size/std::empty/std::data
数值
- 数学特殊函数
- 三维 std::hypot
其他
- 缓存线接口
- std::launder
- std::uncaught_exceptions
- std::to_chars/std::from_chars
- std::atomic<T>::is_always_lock_free
- std::scoped_lock
- std::timespec_get
- std::chrono::duration 与 std::chrono::time_point 的取整函数