- 拥有一个类,其成员的初始化顺序在构造函数中被强烈定义(可能允许成员之间的依赖关系,就像在这个问题中一样- 但我认为这更多是一个设计问题,我可以想象循环依赖关系)。
- 有一个函数调用,参数评估的顺序没有定义,我认为这是为了 C 兼容性。
我们对以下“可怕的钻石”问题有一个错误:
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 {};
编译器不知道选择哪个版本,顺序被定义为不明确的。为什么根本不使用此问题中定义的“从左到右的深度优先分辨率顺序” (答案令人信服),即选择 B 而不是 C?
那么为什么会有这些不同的方法呢?为什么对 1 有严格的顺序而不对 3 有严格的顺序?保持 1 未定义不是更简单吗?还是 2 简单地定义为从左到右?