空のクラスのサイズとC ++の構造体とクラスの違いは何ですか?

空のクラスのサイズとC ++の構造体とクラスの違いは何ですか?

私の考え:

静的メンバーがない場合は、すべてのメンバーがスタックに割り当てられているため、同じメンバーになるはずです。

それらがすべて空であれば、同じです。

静的メンバーがある場合は、メンバー内の相対的な位置に依存します。

右 ?

ありがとう

1
型のサイズは、静的データメンバーの存在によって影響を受けません。
追加された 著者 ildjarn,
pl0xを明確にする - 全く曖昧な質問
追加された 著者 slartibartfast,

2 答え

class == struct the only difference is that in a struct, all members i.e. ivars and methods are public by default.

静的メンバー、すなわち変数またはメソッドは、特定のインスタンスに属さないという意味でクラス/構造体の一部ではありません。サイズは含まれません。

union is not a class nor struct, Union is used to map a struct to a particular memory layout.

サイズを取得するにはインスタンス変数の sizeof()を実行するだけです。

2
追加された

C ++標準標準では、Emptyクラスのサイズは非ゼロにする必要があります。
通常、ほとんどのシステムでは 1 バイトです。

In Bjarne Stroustrup's words, the size is non-zero "To ensure that the addresses of two different objects will be different."

ほとんどのシステムでは、一意のアドレスを取得するためだけにシンボルテーブルにクラス名のエントリが作成されるため、配置ルールは重要ではないため、サイズは 1 です。

スタンダードファン:
C ++ 03標準セクション9:クラス、パラ2:

クラス型の完全なオブジェクトとメンバサブオブジェクトは、サイズがゼロでないものとする。   94)

1
追加された
これは、標準よりも大きい任意のサイズとして定義されています
追加された 著者 Dani,
それでは、あなたによると、クラス名はシンボルテーブルでユニークなアドレスを得るために作られているので、空のクラスのサイズは1です。なぜ空のstructのサイズが0ですか?
追加された 著者 devsda,
どこかで私はこれを読んで、stackOverflowの任意のポストにあるかもしれません。私の間違った概念を修正してくれてありがと
追加された 著者 devsda,
@jhamb:空の構造体のサイズがNon-Zero(通常は 1 )です。 C と同様に C ++"空の構造体のサイズは<�コード> 0 "
追加された 著者 Alok Save,