Oys*_*ein 5 c++ static exception
我听说在C++库中抛出异常可能是有危险的,特别是对于DLL,特别是如果调用代码和库是用不同的编译器编译的.有没有道理呢?只要我坚持使用静态库,它是否安全?请注意,我不是只讨论库中异常的内部使用,我想将它们深入到调用代码中:)
只是为了澄清:假设我有一个编译的静态库,它定义了类Foo:
class Foo
{
public:
// Constructor
Foo()
{
/* ... Do stuff ... */
if (stuffwentwrong)
throw(123); // We throw an integer error code (to make it simple)
}
};
Run Code Online (Sandbox Code Playgroud)
有些人像这样使用它:
try
{
Foo foo_object;
}
catch (int i)
{
std::cout << "Oh bum. Code: " << i;
}
Run Code Online (Sandbox Code Playgroud)
那会安全吗?
特别是如果调用代码和库是使用不同的编译器编译的
通常不能混合使用不具有兼容 ABI 的不同 C++ 编译器。因此,例如,您不能从使用 MSVC 编译的库中抛出异常并尝试使用 GCC 捕获它。
但除此之外,通常不会有任何问题。
小记:
MSVC 有几个不兼容的异常模型,不要混合使用。
| 归档时间: |
|
| 查看次数: |
2068 次 |
| 最近记录: |