空のクラスは空だった?

空のクラス、例えばこんなの
class foo{ };

このクラスのサイズを求めると、C++では1になる。
これはCと異なるところで、Cであると空の構造体のsizeofは0を返すが、C++ではクラスでも構造体でも1が返る。

と・こ・ろ・が、g++ではその後がある。
#include <iostrem>
class foo { };
class foo2 { foo f; };
class foo3 { foo f[0]; };

int main(void) {
std::cout << "foo =" << sizeof(foo) << std::endl;
std::cout << "foo2=" << sizeof(foo2) << std::endl;
std::cout << "foo3=" << sizeof(foo3) << std::endl;
return 0;
}

これをg++ 4.6.3で動かすと、
foo =1
foo2=1
foo3=0

で、えっ!??っとなる。
まったく空のクラス・構造体であればsizeofは1を返してくれるのだが、メンバがいるとちょっと違うようだ。さらにそのメンバが(型に関わらず)0個の配列だったりすると、gcc/g++は0を返しやがる。最新の版(4.8? 4.9?)ではどうなってるだろうか。
これがVC++2010だと両者1を返してくれちゃうんだなぁ。

まぁこんな実装する方がどうかしてるってもんなんだが、空のメンバが居るとサイズがなくなっちゃうってのがちょっと新鮮だったもんで。
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

f_yamaki

Author:f_yamaki

アクセスカウンタ
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブロとも申請フォーム

この人とブロともになる

ブログ内検索
RSSフィード
リンク