使用throw(..)的c++方法声明
C++ method declaration with throw(...)
我有一个关于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)`
}
这是一个微软扩展,基本上意味着"这个函数可能会抛出一些东西",这相当于根本没有规范。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 初始化具有非默认构造函数的std::数组项的更好方法