1

Bjarneの「C++...」で私はそれを読んだばかりです

ほとんどのC++実装が機能する方法は、基本クラスのサイズを変更するには、すべての派生クラスを再コンパイルする必要があることを意味します。

$ 12.4.3 p.318

サイズで?というか、一般的に変更しますか?

4

1 に答える 1

3

通常、サイズを変更するには、すべての派生クラスを再コンパイルする必要があります。その他の変更では、派生クラスの再コンパイルも必要になる場合があります (たとえば、サイズが一定のままであっても、メンバーの順序や型を変更すると、再コンパイルが必要になる場合があります)。

Bjarne が得ようとしていたことのほとんどは、メモリ レイアウトの観点から、派生は通常集約として実装されるということだと思います。たとえば、次のようなものから始めるとします。

struct A { 
   int x;
   int y;
};

struct B : A { 
   int a;
   int b;
};

B b;

のメモリ レイアウトは次のbようになります。

| X | Y | a | b |

...そのため、のサイズがA変更された場合、のメンバーはB複合オブジェクトの異なるオフセットに格納されます。

典型的なビルド システムでは、基本クラスの定義を含むヘッダーを変更すると、変更に再コンパイルが必要かどうかに関係なく (つまり、ヘッダーの変更日がより新しい場合)、すべての派生クラスが再コンパイルされます。依存しているソース ファイルよりも、ソース ファイルが再コンパイルされます。変更されたのが、たとえば、コードにまったく違いをもたらさないコメントだけであってもです)。

于 2012-12-28T15:13:58.867 に答える