Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 您能通过转换运算符的类型捕获异常吗?_C++_Exception Handling_Conversion Operator - Fatal编程技术网

C++ 您能通过转换运算符的类型捕获异常吗?

C++ 您能通过转换运算符的类型捕获异常吗?,c++,exception-handling,conversion-operator,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 Excep

我不知道如何在简短的主题行中很好地表达这个问题,所以让我尝试一个较长的解释。假设我有以下异常类:

class ExceptionTypeA : public std::runtime_error
{
    // stuff
};

class ExceptionTypeB : public std::runtime_error
{
    // stuff

    operator ExceptionTypeA() const; // conversion operator to ExceptionTypeA
};
然后我可以这样做,让它触发捕捉块吗

try
{
    throw ExceptionTypeB();
}
catch (ExceptionTypeA& a)
{
    // will this be triggered?
}

我猜不会,这很不幸,但我想我会问的,因为我在网上找不到任何关于它的信息。是的,我意识到我可以在我的编译器中运行程序,看看会发生什么,但这并不能告诉我标准对这种行为的描述,只是我的编译器实现了什么(我不相信它)。

你不能。标准格式见
15.3/3

处理程序与类型为E的异常对象匹配,如果

  • 处理程序的类型为
    cv T
    cv T&
    且E和T是同一类型(忽略顶级cv)- 限定符),或
  • 处理程序的类型为
    cvt
    cvt&
    ,并且T是明确的公共基类E,或
  • 处理程序的类型为
    cv1t*cv2
    ,E是指针类型,可以转换为处理程序的类型 一方或双方
    • 一种标准指针转换(4.10),不涉及到私有或受保护或非私有指针的转换 模糊类
    • 资格转换

您想要的场景与这些都不匹配
cv
表示“常量和/或易失性组合”

是否包含指向成员的指针?例如,指向成员数据的指针是反变的,因此
int(Base::*)
可以转换为
int(Derived::*)
。如果我扔掉前者,我能抓住后者吗?gcc似乎不同意,但标准措辞有点不清楚。