(空のクラスsizof私の実装には1ですか)?はいの場合はなぜですか? nest_empty
を空のクラスとみなすことはできますか?ネストされた空のクラス
EDIT:
class nest_empty
{
class empty{};
empty d;
};
nest_empty
の大きさは、まだ1でしょうか?はいの場合はなぜですか?
(空のクラスsizof私の実装には1ですか)?はいの場合はなぜですか? nest_empty
を空のクラスとみなすことはできますか?ネストされた空のクラス
EDIT:
class nest_empty
{
class empty{};
empty d;
};
nest_empty
の大きさは、まだ1でしょうか?はいの場合はなぜですか?
nest_empty
のあなたの最初のバージョンは、空のクラス(無非静的データメンバ、および無空でない塩基)である、彼らはあなたの実装でサイズ1を持っているので、もし、それがサイズ1
「なぜを持っていますなぜなら空のクラスはサイズが0で(標準では禁止されている)、実装者が1を選択しているからです。
2番目のnest_empty
は空のクラスではありません(非静的なデータメンバーを持っています)。それは合法的に私はそれが実際に持っているかどうかを伝えることはできません、その唯一の非静的データメンバいるので、サイズ1を持っているd
、タイプempty
であり、空のクラスであるので、おそらくサイズの1
ができあなたの実装では、サイズ1。コンパイラに尋ねてください。
はい。 empty
は、名前空間のちょうどnest_empty
にあります。
class nest_empty{};
は、単にnest_empty
と定義しています。 empty
にはどのメンバーも宣言していません。
sizeof(nest_empty)
は必須ではありませんが、ゼロにはなりません。
$ 9.3言う:あなたがnest_empty
の配列を作成する場合は、それぞれが異なるアドレスを持つ必要があるためComplete objects and member subobjects of class type shall have nonzero size.
はこれが必要とされています。
EDIT
おそらく、sizeof(nest_empty)
は、両方のバージョンで同じ結果を得られますが、それが義務付けられていないこと。標準で言う唯一のことは、空のクラスが非ゼロサイズを持つことです。
編集を参照してください。 –
@equilibrium:(標準で)実装は 'sizeof(nest_empty)== sizeof(空)'を持つことが許されます。ほとんどのコンパイラでは、両方とも '1'になります。 –
私は100%確かではありませんが、ネストされたクラスは通常のクラスのように静的であると確信しています。ですから、nest_emptyクラスは、空のインスタンスを与えない限り、まだサイズ1になります。私は答えが何であるか知りたい。 – Crisfole
@equilibrium:何が変更されたのかを正しく特定せずに答えを出した後の質問を変更するのは非常に混乱します。私は** EDIT **の区切り記号を追加しました。 –