新年伊始,要说什么选题最合适,那无疑是 C++23 了。 去年只写过 Ranges 和几个小特性的提案,对于其他特性,就全放在此篇一览究竟。 23 是个小版本,主要在于「完善」二字,而非「新增」。因此,值得单独拿出来写篇文章的特性其实并不多,大多特性都是些琐碎小点,三言两语便可讲清。 本篇包含绝大多数 C++23 特性,难度三星就表示只会介绍基本用法,但有些特性的原理也会深入讲讲。 Deducing this(P0847) Deducing this 是 C++23 中最主要的特性之一。msvc 在去年三月份就已支持该特性,可以在 v19.32 之后的版本使用。 为什么我们需要这个特性? 大家知道,成员函数都有一个隐式对象参数,对于非静态成员函数,这个隐式对象参数就是 this 指针;而对于静态成员函数,这个隐式对象参数被定义为可以匹配任何参数,这仅仅是为了保证重载决议可以正常运行。 Deducing this 所做的事就是提供一种将非静态成员函数的「隐式对象参数」变为「显式对象参数」的方式。为何只针对非静态成员函数呢?因为静态成员函数并没有 this 指针,隐式对象参数并不能和 this 指针划等号,静态函数拥有隐式对象参数只是保证重载决议能够正常运行而已,这个参数没有其他用处。 于是,现在便有两种写法编写非静态成员函数。 struct S_implicit { void foo() {} }; struct S_explicit { void foo(this S_explicit&) {} }; 通过 Deducing… Continue Reading Overview of C++23 Features