重大变更(一):关于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)。

对于反射的概念,还是很容易理解的,就是编程语言提供一套机制,帮助开发者在代码中获取类型的相关信息,比如类型名称、大小、类的成员、函数参数信息等等。它允许开发者在代码中,根据反射信息执行相应的操作,这让语言变得更加“动态”——也就是根据反射信息来确定代码如何执行。

其实早在C++98标准,在引入dynamic_cast和RTTI时,C++就允许开发者获取有限的运行时类型信息。但是,这些运行时类型信息非常贫乏,除了支持类型转换以外,并没有什么其他用处。而且,即便是这些有限的功能,也特别耗费C++的运行时资源,与C++自身的设计理念有些偏差。

不过,C++新提出的静态反射则大不相同。这个特性秉持了现代C++一以贯之的理念,在编译时获取并确定所有信息。所以说,这个静态反射也就和C++11之后引入的type_traits一样,可以在编译时获取所有的信息。并在编译时,通过模板和constexpr等方式完成相关计算。

静态反射标准的特性尚处于讨论阶段,不过已经有相关的TS(Technical specifications,即技术规范)。因此,我们来了解一下,在TS中是如何使用静态反射的?

首先,C++会提供一个新的关键字——reflexpr,用于获取一个符号的“元数据”。我们可以结合后面这个例子来理解。


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值