gpt4 book ai didi

c++ - 你能通过转换运算符的类型捕获异常吗?

转载 作者:可可西里 更新时间:2023-11-01 18:18:11 26 4
gpt4 key购买 nike

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

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

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

operator ExceptionTypeA() const; // conversion operator to ExceptionTypeA
};

然后我可以这样做,并让它触发 catch block 吗?

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

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

最佳答案

你不能。 15.3/3 标准语:

A handler is a match for an exception object of type E if

  • The handler is of type cv T or cv T& and E and T are the same type (ignoring the top-level cv- qualifiers), or
  • the handler is of type cv T or cv T& and T is an unambiguous public base class of E, or
  • the handler is of type cv1 T* cv2 and E is a pointer type that can be converted to the type of the handler by either or both of
    • a standard pointer conversion (4.10) not involving conversions to pointers to private or protected or ambiguous classes
    • a qualification conversion

您想要的场景与这些都不匹配。 cv 表示“const 和/或 volatile 组合”

关于c++ - 你能通过转换运算符的类型捕获异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2343208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com