现代 C++20 实战高手课
卢誉声
Autodesk 首席工程师
3781 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 29 讲
现代 C++20 实战高手课
15
15
1.0x
00:00/00:00
登录|注册

21|重大变更(一):关于C++26的十大猜想

你好,我是卢誉声。
在上一讲中,我们讨论了 C++23 带来的变化。由于 C++23 已经是冻结特性,所以我们讨论得非常具体。C++23 作为“更好的 C++20”,其本质是针对 C++20 进行改进和修补,所以涵盖的内容比较有限。
但是,作为继 C++20 之后的又一重大标准变更,C++26 及其后续演进将会给我们带来诸多重量级特性。为了更好地理解 C++ 标准的演进思路、掌握 C++ 标准演进的底层逻辑,并一窥未来的变化,这一讲中,我们把视角转向 C++26 及其后续演进。
不过,由于 C++26 还处在提案阶段。所以,我们只能预测一下那些“大概率会进入 C++26”的特性,也许其中一些特性会被推迟或发生改变,但并不影响我们分析 C++ 标准演进的底层逻辑和未来。
好,就让我们从静态反射开始今天的内容。

静态反射

静态反射(static reflection),很有可能是 C++26 中即将引入的最为重量级的特性。但凡是了解何为反射机制,同时熟悉 C++ 的人,看到这个特性时,估计会虎躯一震——什么?C++ 要支持反射?
但是我们需要冷静一下,这个特性的定语很重要,这个反射是“静态的”(static)。
对于反射的概念,还是很容易理解的,就是编程语言提供一套机制,帮助开发者在代码中获取类型的相关信息,比如类型名称、大小、类的成员、函数参数信息等等。它允许开发者在代码中,根据反射信息执行相应的操作,这让语言变得更加“动态”——也就是根据反射信息来确定代码如何执行。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

C++26可能引入的静态反射和异步任务框架是该版本的重要特性之一。静态反射将使编译时获取类型信息成为可能,通过新的关键字reflexpr和reflect工具函数,开发者可以实现针对不同类型的操作逻辑。另一方面,异步任务框架引入了executor、sender/receiver和scheduler等概念,旨在解决并发任务管理的高层调度问题。网络库的标准化被推迟多次,但一旦实现,将大幅降低网络编程的门槛和编程复杂度。此外,C++26中的Freestanding库将在无需操作系统调用和存储空间消耗的前提下,实现标准库最小子集。这些变化将使C++的编译器动态特性更加完善,为并发任务管理提供更便捷的解决方案。文章还提到了TS技术规范,解释了C++标准委员会如何使用技术规范将主要特性变更和标准制定过程“解耦合”。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《现代 C++20 实战高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • peter
    请教老师几个问题: Q1:C++版本选型怎么做? 开发项目时,应该选择哪个C++版本? Q2:Java的反射是动态反射吧,是的话,Java中有静态反射吗?

    作者回复: 1. 如果是没有历史包袱的新项目,你总应该选择编译器支持的最新标准。不过需要注意的是,像gcc到今天为止对C++20支持还不是那么好的情况下,就要酌情选择了。具体,需要考虑你在什么平台以及使用什么编译器,在做出决定前,了解一下当前编译器对新标准的支持情况,再做决定是一个比较好的实践。另外,如果是老项目,则需要评估旧代码升级到新标准的难易程度。虽然说C++是一门包容的编程语言,它几乎在尽可能支持以前的语法、技术和编写方法,但也没办法说做到面面俱到。比如说,旧代码使用了高度自定义的STL,那么升级就是一个不小的问题和挑战。如果能升级,建议尽可能选择最新支持的标准。 2. Java 本身是一门“动态”语言,它的诸多特性都是构建在运行时上的,因此静态反射对于 Java 来说,没有必要,因为运行时反射比静态反射,理论上来说灵活度更高,而且从语言层面也更好实现。

    2023-03-11归属地:北京
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部