我们对以下“可怕的钻石”问题有误:
struct A {virtual void Print() {}};
struct B: virtual public A {virtual void Print() {}};
struct C: virtual public A {virtual void Print() {}};
struct D: public B, public C {};
编译器不知道选择哪个版本,订单被定义为不明确。为什么不使用此question中定义的“从左到右的深度优先解析顺序”(带有难以理解的答案),即选择B而不是C?
那么为什么这些不同的方法呢?为什么有一个严格的订单1而不是3?保持1未定义是不是更简单?或者2简单地定义为从左到右?
答案 0 :(得分:1)
这些是非常不同的情况,需要进行各种权衡。在每种情况下,您都必须考虑
这些问题的答案在每种情况下都有很大差异,因此选择不同是很自然的。