为什么 c++ 使用 throw() 关键字来指示函数不会引发任何异常
Why c++ use throw() keyword to indicate the function won't throw any exceptions
这个关键字有点违反直觉吗?
这个函数不会抛出任何异常,所以我们给它添加了throw((标记。它应该是silent((还是类似的?
从C++17之前的角度来看:这可能与直觉相悖,但只是暂时的。throw(type, type, ...)
提供了函数可能抛出的异常类型的列表。throw()
提供了一个空的类型列表,即函数不能抛出任何类型的异常。
throw()
=可以抛出这些异常:">
也就是说,不能扔任何东西。
历史上,提供了一个真实的列表:throw(X,Y,Z)
意味着"可以抛出X
、Y
或Z
"。该语法被删除是因为它没有真正的用处:最有用的保证是函数不能抛出任何东西。
可以选择使用throw()
说明符(称为异常规范(声明函数,以列出允许抛出的异常类型。如果列表为空,则函数根本不允许抛出任何异常。如果函数有throw()
说明符并抛出列表中没有的异常,则默认情况下程序会立即终止(此行为可以在运行时自定义(。
这种使用throw()
说明符的做法在C++11中被弃用,空throw()
说明符的特殊情况被新的noexcept
说明符所取代。
在C++17中从语言中删除了非空的throw()
说明符,在C++20中删除了空throw()
说明符。
关键字已被弃用,在当前标准中它是"noexcept">
相关文章:
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- 通过引用从 c++ 函数异常返回对象是否安全
- 智能指针和构造函数异常
- 构造函数C++异常说明符
- boost::archive::text_iarchive构造函数异常
- C++堆栈对象的构造函数异常处理
- 默认构造函数C++异常不会引发吗?
- 重写std的析构函数:异常
- 将向量作为参数(C++)传递时,没有匹配函数异常
- 当函数中静态变量的构造函数异常终止时会发生什么
- 如何:捕获输入函数异常的可变包装函数
- 在c++中,如果基类构造函数异常,则构造函数和析构函数的顺序可以是这样
- noexcept(false)析构函数覆盖所有特殊成员函数'异常规范
- c++重载函数异常规范
- c++ RAII析构函数异常
- 如何捕获构造函数异常
- C++构造函数异常处理
- 捕获构造函数异常的RAII方法
- C++析构函数异常
- Std::unique_ptr::reset和构造函数异常