为什么c ++使用throw()关键字表示该函数不会抛出任何异常[重复]

问题描述 投票:1回答:4

此问题已经在这里有了答案:

此关键字是否有点违反直觉?

该函数不会引发任何异常,因此我们向其添加了throw()标记。它应该是silent()还是类似的东西?

c++ exception exception-specification
4个回答
2
投票

从C ++ 17以前的角度来看:这可能是违反直觉的,但只是片刻。 throw(type, type, ...)提供了函数可能抛出的异常类型的列表。 throw()提供了一个empty类型列表,即该函数不能引发任何类型的异常。


1
投票

throw() =可以完全抛出那些异常:“”

即不能扔任何东西。

从历史上看,提供了一个真实的列表:throw(X,Y,Z)表示“可以抛出XYZ”。该语法已删除,因为它并不是真正有用的:最有用的保证是函数不能抛出任何东西。


0
投票

可以选择使用throw()说明符(称为exception specification)声明函数,以列出允许抛出的异常类型。如果列表为空,则该函数根本不会引发任何异常。如果该函数具有throw()说明符并引发列表中未包含的异常,则默认情况下该程序将立即终止(可以在运行时自定义此行为)。

throw()标识符的这种用法在C ++ 11中已被弃用,空的throw()标识符的特定情况已由新的noexcept标识符代替。

从C ++ 17的语言中删除了非空的noexcept说明符,并在C ++ 20的语言中删除了空的throw()说明符。


-3
投票

不推荐使用该关键字,在当前标准中为'noexcept'

© www.soinside.com 2019 - 2024. All rights reserved.