指定されていません(0より大きくなければならないことを除いて)。実装も定義されていません(したがって、文書化する必要はありません)。
実装が空のクラスに1以外のサイズを使用する理由はわかりませんが(「空のクラス」とは、別のクラスから派生していないクラスについて話していると仮定します)、可能だと思います。
これが(実装が定義されているのではなく)不特定の動作であると判断するものについてのChubsdadの質問に対処するには:
この規格では、「不特定の動作」を次のように定義しています。
実装に依存する、整形式のプログラム構成と正しいデータの動作。どの動作が発生するかを文書化するために実装は必要ありません。
「実装定義の動作」を次のように定義します。
実装に依存し、各実装が文書化する、整形式のプログラム構成と正しいデータの動作
したがって、2つの違いは、実装定義の動作を文書化する必要があることだけです。標準では、動作を文書化する必要がある場合(通常、動作は実装定義であると言うことにより)が示されます。
残念ながら、標準では、動作が指定されていない(または定義されていない)と常に直接述べているわけではありません。したがって、いくつかの分析が必要です。
標準が言うので:
sizeof
空のクラスの結果がゼロより大きいと評価される必要があります。
- その値が何である必要があるかを示していません(ゼロより大きい)
- 値を文書化する必要がある(または実装で定義されている)必要があるとは言っていません
除去のプロセスにより、空のクラスのサイズは指定されません。
この分析(およびC ++標準と同じくらい複雑なものの多くの分析)で考えられる問題は、空のクラスのサイズを特定の値にする必要がある、私が見逃した標準の他のコーナーがある可能性があることです。 。そして、その要件は、他のいくつかのルールからの推論によるものである可能性があります(またはそれは控除でしょうか?)。それは完全に述べられていないかもしれません。特定の問題に適用される可能性のある標準のすべての領域を追跡することは必ずしも容易ではありません。
もしそうなら、誰かがそれを書き留めて私の議論を打ちのめすでしょう。