考虑这两个可能的类定义:
图表A:
struct A
{
A() = delete;
};
展览A':
struct A
{
A() noexcept = delete;
}
将删除的函数声明为noexcept
是否有任何意义?
答案 0 :(得分:9)
(最初发表此评论作为评论,但鼓励发布作为答案。)
简单,不。无法调用已删除的函数(或者,在构造函数的情况下,用于初始化对象),更不用说抛出异常。
编辑:
hvd在下面的评论中提到,noexcept(f())
不会调用f()
。如果类A
的构造函数是delete
d,那么noexcept(A())
将无法编译,无论构造函数是否被声明为noexcept
。这(基本上)是要求noexcept(expression)
被赋予有效表达式的结果 - 而类A()
的表达式A
需要有效的构造函数。
Revolver_Ocelot也正确地指出不可能在noexcept
上重载(即,不可能有两个具有相同签名的函数,除了一个是noexcept
而一个不是)。因此,在类A
的定义中,A() = delete
和A() noexcept = delete
都具有相同的效果,即类A
没有非参数构造函数。