13

考虑一个类的这两个可能的定义:

展品 A:

struct A
{
    A() = delete;
};

图表 A':

struct A
{
    A() noexcept = delete;
}

将已删除的函数声明为 有什么意义noexcept

4

1 回答 1

12

(最初将此作为评论发布,但鼓励作为答案发布。)

简单地说,没有。不能调用被删除的函数(或者,在构造函数的情况下,不能用于初始化对象),更不用说抛出异常了。

编辑:

hvd 在下面的评论中提到noexcept(f())不调用f(). 如果类的构造函数Adeleted,那么noexcept(A())无论构造函数是否声明,都会编译失败noexcept。这(本质上)是noexcept(expression)被赋予有效表达式的要求的结果 - 并且A()类的表达式A需要有效的构造函数。

Revolver_Ocelot 还正确地指出不可能重载noexcept(即不可能有两个具有相同签名的函数,除了一个是noexcept,一个不是)。因此,在 class 的定义中,A两者都具有相同的效果,即 class没有非参数构造函数。A() = deleteA() noexcept = deleteA

于 2016-07-09T07:45:35.637 回答