2

空のクラスのサイズは、標準によってゼロ以外であると定義されていることを私は知っています。ほとんどの実装では通常1バイトです。
しかし、C ++標準はオブジェクトの可能な最小サイズを指定していますか?標準に従って、空のクラスオブジェクトのサイズは少なくとも1バイトであると想定するのは論理的ですか。

4

1 に答える 1

8

オブジェクトの最小サイズはゼロです(§1.8/ 5)。ただし、完全なオブジェクトのサイズは常にゼロ以外である必要があり、そのサイズは少なくとも1つである必要があります。

ビットフィールド(9.6)でない限り、最も派生したオブジェクトのサイズはゼロ以外であり、1バイト以上のストレージを占有する必要があります。基本クラスのサブオブジェクトのサイズはゼロである可能性があります。自明にコピー可能なタイプまたは標準レイアウトタイプ(3.9)のオブジェクトは、連続したバイトのストレージを占有するものとします。

空の基本クラスの最適化であるEBCOと呼ばれるもののおかげで、空の型の基本クラスのサブオブジェクトのサイズをゼロにすることができます。

于 2013-02-11T12:47:50.843 に答える