アカウント名:
パスワード:
別に悩みはしないけどCで sizeof(void) は1なんとなくオモロイ
c++でclass Empty {};sizeof(Empty) も 1 だなcはどうだっけ
class Empty {};class Single {char a;};はどっちも 1
struct empty{};struct single {char a;};C(gcc, clang)では 0 と 1これを C++(clang のC++) でコンパイルすると(ファイル名の拡張子は.cのままでも)1と1になった。
C++の場合、empty a, b;とあったとき&a != &bとなったり、empty c[2];について&c[0] != &c[1]かつ(void*)((char*)&c[0] + sizeof (empty)) == (void*)&c[1]となったり、ということを保障するためオブジェクトのサイズは最低1以上にするしかないという決まりだったと思います。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」
悩みはしないけど (スコア:0)
別に悩みはしないけどCで sizeof(void) は1
なんとなくオモロイ
Re: (スコア:0)
c++で
class Empty {};
sizeof(Empty) も 1 だな
cはどうだっけ
Re:悩みはしないけど (スコア:1)
class Empty {};
class Single {char a;};
はどっちも 1
struct empty{};
struct single {char a;};
C(gcc, clang)では 0 と 1
これを C++(clang のC++) でコンパイルすると(ファイル名の拡張子は.cのままでも)1と1になった。
-- 哀れな日本人専用(sorry Japanese only) --
Re:悩みはしないけど (スコア:1)
C++の場合、empty a, b;とあったとき&a != &bとなったり、empty c[2];について&c[0] != &c[1]かつ(void*)((char*)&c[0] + sizeof (empty)) == (void*)&c[1]となったり、ということを保障するためオブジェクトのサイズは最低1以上にするしかないという決まりだったと思います。