首页 > 后端开发 > C++ > C 17 中引入了哪些关键语言功能、库添加和已弃用的元素?

C 17 中引入了哪些关键语言功能、库添加和已弃用的元素?

Mary-Kate Olsen
发布: 2024-12-08 11:10:19
原创
501 人浏览过

What are the key language features, library additions, and deprecated elements introduced in C  17?

C 17 功能

C 17 为该语言引入了大量新功能,显着扩展了其功能并增强了其可用性。这些新增内容涵盖了语言的各个方面,从模板改进和 lambda 增强到库添加和弃用元素。

语言功能

模板和通用代码:

  • 类的模板参数推导模板: 构造函数现在可以推导模板参数,类似于函数。
  • ;模板参数: 表示任何非类型模板参数类型的值。
  • 修订非类型模板参数: 对非类型模板进行了一些修复和修订

Lambda:

  • Constexpr Lambda: 如果 Lambda 满足某些要求,现在可以显式标记为 constexpr .
  • 捕捉这个Lambda 函数: Lambda 函数现在可以捕获 this 指针,从而允许访问成员变量和方法。

属性:

  • 新属性: 属性,例如 [[fallthrough]]、[[nodiscard]] 和引入 [[maybe_unused]] 是为了增强代码的清晰度和可读性。
  • 命名空间和枚举器上的属性: 现在可以使用 [[attributes]] 将属性应用于命名空间和枚举器。

语法清理:

  • 内联变量:现在可以内联声明变量,允许编译器内联其定义。
  • 简化的命名空间声明: 引入了命名空间 A::B 语法以简化命名空间声明。
  • 简化的 static_assert: 现在可以在没有字符串参数的情况下使用 static_assert 语句。

干净的多重返回和流程控制:

  • 结构化绑定: 结构化绑定可以更方便地在声明中解包元组和其他数据结构。
  • 带初始化的条件语句: if (init; condition) 和 switch (init;condition) 在条件语句中提供了更大的灵活性。
  • 通用化基于范围的 For 循环:基于范围的 for 循环现在支持不同于以下的标记(结束迭代器):开始迭代器。
  • if constexpr: if constexpr 允许基于条件编译关于编译时常量。

其他:

  • 十六进制浮点文字:浮点文字现在可以以十六进制格式表示。
  • 过度对齐数据的动态内存分配:改进了对过度对齐的动态内存分配的支持数据。
  • 保证复制消除:某些不保证复制消除的场景现在有了明确的保证。
  • 改进的评估顺序:某些表达式的求值顺序规则已被修改,以便更清晰

库添加

数据类型:

  • std::variant: 多态可以保存多个替代值之一的值的类型类型。
  • std::可选: 表示可能包含或不包含值的可选值。
  • std::any: A可以保存任意值的类型擦除容器type.
  • std::string_view: 对字符序列的引用,类似于 const char*。
  • std::byte: A表示原始类型bytes.

实用程序:

  • std::invoke: 使用给定参数调用可调用函数,支持各种类型可调用对象。
  • std::apply: 解压元组并将其元素作为参数传递给可调用对象。
  • std::invoke_result 和相关概念: 用于确定给定调用可调用对象的有效性和结果的概念和类型参数。

文件系统库 (TS v1):

  • 用于处理文件系统、目录和文件的类和函数。

新算法:

  • for_each_n
  • reduce
  • transform_reduce
  • exclusive_scan
  • inclusive_scan
  • transform_exclusive_scan
  • transform_inclusive_scan

线程:

  • std::shared_mutex:一种共享互斥锁,允许多个读取者但只允许一个写入者。
  • atomic::is_always_lockfree: 指示原子类型是否在所有情况下都是无锁的。
  • scoped_lock:: 锁定多个互斥体同时简化锁定和解锁。

(部分)库基础知识库(TS v1):

  • 执行搜索和使用多态的功能分配器。

容器改进:

  • try_emplace 和 insert_or_assign:改进了处理特定场景的容器插入方法。
  • 容器拼接:高效之间移动节点

智能指针更改:

  • 修复和调整 std::unique_ptr 和其他智能指针。

额外改进:

  • 可简单复制的 std::reference_wrapper: 提高了某些情况下的性能。
  • 更新了 C11 库: C 17 标准库基于 C11 ,提供与现代的兼容性系统。
  • 已弃用的元素: 先前版本的 C 标准中的各种元素已被弃用。

C 1z 中的功能(预计适用于 C 17)* *

确定 C 1z 工作草案中的哪些功能将在 C 17 中可用编译器,建议查阅各个编译器的文档和发行说明。并非 C 1z 的所有功能都一​​定会在每个 C 17 编译器中实现。

请注意,本摘要中并未提及所有更改或功能。如需完整列表,请参阅 C 17 标准文档或其他信誉良好的来源。

以上是C 17 中引入了哪些关键语言功能、库添加和已弃用的元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板