c-将删除的函数声明为noexcept有什么意义吗?
作者:互联网
考虑一个类的以下两个可能的定义:
展览A:
struct A
{
A() = delete;
};
展览A’:
struct A
{
A() noexcept = delete;
}
将删除的函数声明为noexcept有什么意义吗?
解决方法:
(最初将其发布为评论,但鼓励将其发布为答案.)
简单地说,不.不能调用被删除的函数(或者在构造函数的情况下,用于初始化对象),更不用说抛出异常了.
编辑:
在下面的评论中提到的hvd,noexcept(f())不会调用f().如果删除了类A的构造函数,则无论构造函数是否声明为noexcept,noexcept(A())都将无法编译.这(本质上)是要求为noexcept(expression)提供有效表达式的结果,并且类A的表达式A()需要有效的构造函数.
Revolver_Ocelot也正确地指出,不可能在noexcept上重载(即,不可能有两个具有相同签名的函数,除了一个是noexcept而一个不是).因此,在类A的定义中,A()= delete和A()noexcept = delete都具有相同的效果,即,类A没有无参数构造函数.
标签:noexcept,c,deleted-functions,exception-specification 来源: https://codeday.me/bug/20191010/1887220.html