rme*_*dor 8 c++ exception-handling conversion-operator
我不知道如何在一个简短的主题行中很好地表达这个问题,所以让我尝试一个更长的解释.假设我有这些异常类:
class ExceptionTypeA : public std::runtime_error
{
// stuff
};
class ExceptionTypeB : public std::runtime_error
{
// stuff
operator ExceptionTypeA() const; // conversion operator to ExceptionTypeA
};
Run Code Online (Sandbox Code Playgroud)
我可以这样做,并让它触发catch块吗?
try
{
throw ExceptionTypeB();
}
catch (ExceptionTypeA& a)
{
// will this be triggered?
}
Run Code Online (Sandbox Code Playgroud)
我猜它不会,这是不幸的,但我想我会问,因为我无法在网上或SO上找到任何信息.是的,我意识到我可以在我的编译器中运行程序,看看会发生什么,但这不会告诉我标准对这种行为的说法,只是我的编译器实现的(我不相信它).
Joh*_*itb 15
你不能.Standardese at 15.3/3:
处理程序是E类型的异常对象的匹配项
- 处理程序是类型
cv T或者cv T&E和T是相同类型(忽略顶级cv限定符),或- 处理程序是类型
cv T或者cv T&T是E的明确公共基类,或者- 处理程序是类型
cv1 T* cv2,E是指针类型,可以通过其中一个或两个转换为处理程序的类型
- 标准指针转换(4.10),不涉及到指向私有或受保护或模糊类的指针的转换
- 资格转换
您希望的方案与这些方案都不匹配.cv表示"常量和/或挥发性组合"
| 归档时间: |
|
| 查看次数: |
1686 次 |
| 最近记录: |