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中文网其他相关文章!

C#适合需要开发效率和类型安全的项目,而C 适合需要高性能和硬件控制的项目。 1)C#提供垃圾回收和LINQ,适用于企业应用和Windows开发。 2)C 以高性能和底层控制着称,广泛用于游戏和系统编程。

C 代码优化可以通过以下策略实现:1.手动管理内存以优化使用;2.编写符合编译器优化规则的代码;3.选择合适的算法和数据结构;4.使用内联函数减少调用开销;5.应用模板元编程在编译时优化;6.避免不必要的拷贝,使用移动语义和引用参数;7.正确使用const帮助编译器优化;8.选择合适的数据结构,如std::vector。

C 中的volatile关键字用于告知编译器变量值可能在代码控制之外被改变,因此不能对其进行优化。1)它常用于读取可能被硬件或中断服务程序修改的变量,如传感器状态。2)volatile不能保证多线程安全,应使用互斥锁或原子操作。3)使用volatile可能导致性能slight下降,但确保程序正确性。

在C 中测量线程性能可以使用标准库中的计时工具、性能分析工具和自定义计时器。1.使用库测量执行时间。2.使用gprof进行性能分析,步骤包括编译时添加-pg选项、运行程序生成gmon.out文件、生成性能报告。3.使用Valgrind的Callgrind模块进行更详细的分析,步骤包括运行程序生成callgrind.out文件、使用kcachegrind查看结果。4.自定义计时器可灵活测量特定代码段的执行时间。这些方法帮助全面了解线程性能,并优化代码。

使用C 中的chrono库可以让你更加精确地控制时间和时间间隔,让我们来探讨一下这个库的魅力所在吧。C 的chrono库是标准库的一部分,它提供了一种现代化的方式来处理时间和时间间隔。对于那些曾经饱受time.h和ctime折磨的程序员来说,chrono无疑是一个福音。它不仅提高了代码的可读性和可维护性,还提供了更高的精度和灵活性。让我们从基础开始,chrono库主要包括以下几个关键组件:std::chrono::system_clock:表示系统时钟,用于获取当前时间。std::chron

C 在实时操作系统(RTOS)编程中表现出色,提供了高效的执行效率和精确的时间管理。1)C 通过直接操作硬件资源和高效的内存管理满足RTOS的需求。2)利用面向对象特性,C 可以设计灵活的任务调度系统。3)C 支持高效的中断处理,但需避免动态内存分配和异常处理以保证实时性。4)模板编程和内联函数有助于性能优化。5)实际应用中,C 可用于实现高效的日志系统。

C 中的ABI兼容性是指不同编译器或版本生成的二进制代码能否在不重新编译的情况下兼容。1.函数调用约定,2.名称修饰,3.虚函数表布局,4.结构体和类的布局是主要涉及的方面。

DMA在C 中是指DirectMemoryAccess,直接内存访问技术,允许硬件设备直接与内存进行数据传输,不需要CPU干预。1)DMA操作高度依赖于硬件设备和驱动程序,实现方式因系统而异。2)直接访问内存可能带来安全风险,需确保代码的正确性和安全性。3)DMA可提高性能,但使用不当可能导致系统性能下降。通过实践和学习,可以掌握DMA的使用技巧,在高速数据传输和实时信号处理等场景中发挥其最大效能。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

WebStorm Mac版
好用的JavaScript开发工具

Atom编辑器mac版下载
最流行的的开源编辑器

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中