其他分享
首页 > 其他分享> > c-将删除的函数声明为noexcept有什么意义吗?

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