Sté*_*ane 3 c++ exception try-catch
鉴于此代码,A第三方库中的位置,B是我写的代码:
class A {...};
class B { public: B( const A &a ); ... };
try
{
A a(...);
throw a;
}
catch ( const B &b )
{
// ...do stuff with B, like log the details to a file...
}
Run Code Online (Sandbox Code Playgroud)
如果A抛出一个对象,则catch B跳过我的.我希望B有一个构造函数来获取一个A对象,这可能会起作用.
有什么我可以做的工作,或者我必须修改所有catch条款来处理捕获A和B?
不,那不行.将抛出的对象与处理程序匹配时,不会考虑用户定义的转换.根据C++ 11标准的第15.3/3段:
处理程序是类型为
Eif 的异常对象的匹配项
该处理程序的类型是
cv T或cv T&和E和T是相同的类型(忽略顶层CV-限定符),或处理程序是类型
cv T或cv T&,T是一个明确的公共基类E,或处理程序是类型
cv T或const T&其中T是指针类型,并且E是可以T通过其中一个或两个转换为的指针类型
标准指针转换(4.10),不涉及到指向私有或受保护或模糊类的指针的转换
资格转换
该处理程序的类型为
cv T或const T&其中T是一个指针或指针构件类型和E是std::nullptr_t.