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