use*_*177 10 c++ exception-specification deleted-functions noexcept
考虑这两个可能的类定义:
图表A:
struct A
{
A() = delete;
};
Run Code Online (Sandbox Code Playgroud)
图表A':
struct A
{
A() noexcept = delete;
}
Run Code Online (Sandbox Code Playgroud)
声明删除的函数是否有任何意义noexcept
?
(最初将此作为评论发布,但鼓励发布作为答案.)
简单地说,没有.无法调用已删除的函数(或者,在构造函数的情况下,用于初始化对象),更不用说抛出异常.
编辑:
在下面的评论中提到的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
不具有非参数的构造函数.
归档时间: |
|
查看次数: |
275 次 |
最近记录: |