【发布时间】:2021-05-09 08:16:17
【问题描述】:
似乎在 C++20 中引入了一种称为“预期析构函数”的东西。 在C++17 [class.dtor]:
- 在析构函数的声明中,声明符是一个函数声明符 (11.3.5),形式为
ptr-declarator (parameter-declaration-clause) noexcept-specifier(opt) attribute-specifier-seq(opt)
在 C++20 中,这已更改为 this:
- 声明符 id 具有以 ~ 开头的非限定 id 的声明声明了预期的析构函数;它的声明符应该是一个函数声明符([dcl.fct]),形式为
ptr-declarator (parameter-declaration-clause) noexcept-specifier(opt) attribute-specifier-seq(opt)
那么这个“预期析构函数”是什么?好吧,标准似乎并没有澄清,至少对我来说:
- 在类的定义结束时,在该类中声明的预期析构函数之间执行重载决议,并使用空参数列表来选择该类的析构函数,也称为选定的析构函数。如果重载解析失败,则程序是非良构的。
引入“预期析构函数”这一新概念的原因是什么?它甚至意味着什么?它如何更改代码?它允许做什么?
我认为这可能是为了在模板元编程中使用,或者可能与 SFINAE 相关,但这些只是猜测。
【问题讨论】:
标签: c++ language-lawyer destructor c++20 raii