use*_*177 10 c++ exception-specification deleted-functions noexcept
考虑这两个可能的类定义:
图表A:
struct A
{
A() = delete;
};
Run Code Online (Sandbox Code Playgroud)
图表A':
struct A
{
A() noexcept = delete;
}
Run Code Online (Sandbox Code Playgroud)
声明删除的函数是否有任何意义noexcept?
(最初将此作为评论发布,但鼓励发布作为答案.)
简单地说,没有.无法调用已删除的函数(或者,在构造函数的情况下,用于初始化对象),更不用说抛出异常.
编辑:
在下面的评论中提到的hvd noexcept(f())没有打电话f().如果类的构造函数A是deleted,那么noexcept(A())无论是否声明构造函数,都将无法编译noexcept.这(基本上)是要求noexcept(expression)被赋予有效表达式的结果 - 并且A()类的表达式A需要有效的构造函数.
Revolver_Ocelot还正确地指出不可能重载noexcept(即,不可能有两个具有相同签名的函数,除了一个是noexcept一个而一个不是).所以,类的定义中A,都A() = delete和A() noexcept = delete都具有相同的效果,即类A不具有非参数的构造函数.