我对C ++中的声明类方法有疑问。我通常使用声明方法而不提供throw(将抛出任何东西)。但是我看到了这样的声明:
void method(int param) throw (...);
有任何意义吗?有什么区别?
答案 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扩展,它基本上意味着“这个函数可能会抛出一些东西”,这相当于没有任何规范。添加它的价值值得怀疑。