此问题已经在这里有了答案:
此关键字是否有点违反直觉?
该函数不会引发任何异常,因此我们向其添加了throw()标记。它应该是silent()还是类似的东西?
从C ++ 17以前的角度来看:这可能是违反直觉的,但只是片刻。 throw(type, type, ...)
提供了函数可能抛出的异常类型的列表。 throw()
提供了一个empty类型列表,即该函数不能引发任何类型的异常。
throw()
=可以完全抛出那些异常:“”
即不能扔任何东西。
从历史上看,提供了一个真实的列表:throw(X,Y,Z)
表示“可以抛出X
或Y
或Z
”。该语法已删除,因为它并不是真正有用的:最有用的保证是函数不能抛出任何东西。
可以选择使用throw()
说明符(称为exception specification)声明函数,以列出允许抛出的异常类型。如果列表为空,则该函数根本不会引发任何异常。如果该函数具有throw()
说明符并引发列表中未包含的异常,则默认情况下该程序将立即终止(可以在运行时自定义此行为)。
throw()
标识符的这种用法在C ++ 11中已被弃用,空的throw()
标识符的特定情况已由新的noexcept
标识符代替。
从C ++ 17的语言中删除了非空的noexcept
说明符,并在C ++ 20的语言中删除了空的throw()
说明符。
不推荐使用该关键字,在当前标准中为'noexcept'