使用throw(..)的c++方法声明

C++ method declaration with throw(...)

本文关键字:c++ 方法 声明 throw 使用      更新时间:2023-10-16

我有一个关于c++中声明类方法的问题。我通常使用声明方法而不提供throw(将抛出任何东西)。但是我在某个地方看到了这样的声明:

void method(int param) throw (...);

有什么意义吗?区别是什么?

这在c++中是无效的所以,不,它没有"任何意义":

g++ -std=c++11 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
main.cpp:1:31: error: expected type-specifier before '...' token
 void method(int param) throw (...);

(不支持c++ 03)

在异常说明符中唯一可以写...的地方是在动态异常说明中的类型id之后,以便形成包扩展([C++11: 15.4/16]),如下所示:

template <typename ...T>
void method(int param) throw (T...) {}
int main()
{
    method<int, bool>(42);
    // ^ somewhat like invoking a `void method(int) throw(int, bool)`
}

这是一个微软扩展,基本上意味着"这个函数可能会抛出一些东西",这相当于根本没有规范。