1. ホーム
  2. c++

[解決済み] C++: 空のクラスのオブジェクトの大きさは?

2022-09-02 19:07:27

質問

私は 空のクラスのオブジェクトのサイズ . それは確かに ではなく なぜなら、他のオブジェクトと同じように参照したり指し示したりすることが可能だからです。しかし、そのようなオブジェクトはどれくらいの大きさなのでしょうか?

こんな小さなプログラムを使ってみました。

#include <iostream>
using namespace std;

class Empty {};

int main()
{
    Empty e;
    cerr << sizeof(e) << endl;
    return 0;
}

Visual C++とCygwin-g++の両方のコンパイラで得られた出力は次の通りです。 1バイト ! マシンワードのサイズ(32ビットまたは4バイト)を想定していたので、これは少し意外でした。

どなたか なぜ は1バイトなのか? なぜでしょう? 4バイト?これはコンパイラやマシンにも依存するのでしょうか?また、なぜ空のクラスオブジェクトが

となるのか、より説得力のある理由を教えてください。 はしません。 はサイズ 0 バイトであるのか?

どのように解決するのですか?

引用元 Bjarne StroustrupのC++スタイルとテクニックに関するFAQ で、size が 0 でない理由は "2つの異なるオブジェクトのアドレスが異なることを保証するためです" そして size は 1 にすることができます。