考虑一个类的这两个可能的定义:
展品 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是deleted,那么noexcept(A())无论构造函数是否声明,都会编译失败noexcept。这(本质上)是noexcept(expression)被赋予有效表达式的要求的结果 - 并且A()类的表达式A需要有效的构造函数。
Revolver_Ocelot 还正确地指出不可能重载noexcept(即不可能有两个具有相同签名的函数,除了一个是noexcept,一个不是)。因此,在 class 的定义中,A两者都具有相同的效果,即 class没有非参数构造函数。A() = deleteA() noexcept = deleteA