美国空军的 JSF C++ 编码标准要求为访问虚拟基的每个派生类声明虚拟基类。
例如,在以下层次结构中:
A
/ \
B1 B2
C1 C2
\ /
D
...他们在本标准中强加的规则(AV Rule 88.1,供参考)要求类声明如下:
class A;
class B1 : virtual A;
class B2 : virtual A;
class C1 : B1, virtual A;
class C2 : B2, virtual A;
class D : C1, C2, virtual A;
我的问题如下:
- 这在语义上是否与仅在声明 @ B1/B2 中虚拟继承,而不是
virtual A
在每个后续类声明中指定? - 如果它在语义上有所不同,为什么会有人/想要/离开它?对我来说,您绝对必须在每一层继承中都这样做似乎很愚蠢,因为这会增加潜在的故障点。