为什么 c++ 使用 throw() 关键字来指示函数不会引发任何异常

Why c++ use throw() keyword to indicate the function won't throw any exceptions

本文关键字:函数 异常 任何 指示 使用 c++ throw 关键字 为什么      更新时间:2023-10-16

这个关键字有点违反直觉吗?

这个函数不会抛出任何异常,所以我们给它添加了throw((标记。它应该是silent((还是类似的?

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

throw()=可以抛出这些异常:">

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

历史上,提供了一个真实的列表:throw(X,Y,Z)意味着"可以抛出XYZ"。该语法被删除是因为它没有真正的用处:最有用的保证是函数不能抛出任何东西。

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

这种使用throw()说明符的做法在C++11中被弃用,空throw()说明符的特殊情况被新的noexcept说明符所取代。

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

关键字已被弃用,在当前标准中它是"noexcept">