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

时间:2014-06-30 10:59:57

标签: c++ methods throw

我对C ++中的声明类方法有疑问。我通常使用声明方法而不提供throw(将抛出任何东西)。但是我看到了这样的声明:

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

有任何意义吗?有什么区别?

2 个答案:

答案 0 :(得分:3)

那么it's not valid 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 (...);

nor in C++03)功能

您可以在异常说明符中编写...的唯一位置是在动态异常规范中的 type-id 之后,以便形成包扩展([C++11: 15.4/16]),like so

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)`
}

答案 1 :(得分:2)

这是一个Microsoft扩展,它基本上意味着“这个函数可能会抛出一些东西”,这相当于没有任何规范。添加它的价值值得怀疑。