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

Is there any point in declaring a deleted function as noexcept?

考虑 class 的这两个可能的定义:

图表 A:

struct A
{
    A() = delete;
};

图表 A′:

struct A
{
    A() noexcept = delete;
}

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

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

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

编辑:

hvd 在下面的评论中提到 noexcept(f()) 没有调用 f()。如果classA的构造函数是deleted,那么noexcept(A())就会编译失败,不管是否声明了noexcept构造函数。这(本质上)是要求 noexcept(expression) 被赋予有效表达式的结果 - 而 class A 的表达式 A() 需要有效的构造函数。

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