0

这个关键字是不是有点反直觉?

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

4

4 回答 4

4

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

于 2019-11-01T08:07:32.783 回答
1

可以选择使用throw()称为异常规范的说明符声明函数,以列出允许抛出的异常类型。如果列表为空,则函数根本不允许抛出任何异常。如果该函数有一个throw()说明符并抛出一个不在列表中的异常,则程序默认立即终止(此行为可以在运行时自定义)。

说明符的这种用法throw()在 C++11 中已被弃用,空throw()说明符的特定情况已替换为新noexcept说明符。

在 C++17 中,非空throw()说明符已从语言中移除,而空throw()说明符在 C++20 中已移除。

于 2019-11-01T08:19:21.000 回答
1

throw()= 可以准确地抛出那些异常:""

也就是说,不能扔任何东西。

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

于 2019-11-01T08:09:51.730 回答
-3

该关键字已弃用,在当前标准中它是“noexcept”

于 2019-11-01T08:00:38.640 回答