Meyers在“更有效的C++”的第12条中解释说,尽管虚拟调用是根据动态类型使用最佳拟合算法进行解析的,但异常捕获是基于catch子句的顺序的。

class A {};
class B : public A {};

void main()
{
try {throw B();}
catch(A &a) {}
catch{B &b} {} // never entered
}

这是20年后的现在的标准行为吗?与虚拟功能的区别背后的逻辑是什么?

最佳答案

是的,这是标准行为。在许多流行的编程语言(例如Java或C#)中,它也是标准的。

这样可以完全控制捕获异常的代码。

考虑具有多重继承的异常层次结构。

10-06 05:22
查看更多