米国空軍のJSFC++コーディング標準では、仮想ベースにアクセスする派生クラスごとに仮想ベースクラスを宣言する必要があります。
たとえば、次の階層では次のようになります。
A
/ \
B1 B2
C1 C2
\ /
D
...この標準で課す規則(参照用のAV規則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;
私の質問は次のとおりです。
virtual A
これは、宣言@ B1 / B2で仮想的に継承し、後続の各クラス宣言で指定しないこととは意味的に異なりますか?- それが意味的に異なる場合、なぜ誰かがそれを省略したいのですか?潜在的な障害点が追加されるため、継承の各レイヤーでこれを絶対に実行する必要があることは、私にはばかげているように思われます。