Mac で sizeof(r) を実行すると。sizeof(r) = 1と書かれています。私の理解では、ユニオンのサイズはその最大要素のサイズです。この場合、最大の要素は struct ではないでしょうか?
union
{
struct
{
char i:1;
char j:2;
char m:3;
}s;
char ch;
}r;
共用体は、構造体と文字の 2 つの部分で構成されます。ユニオンのサイズは、メモリを共有するため、最大の要素のサイズに、それが固執するパディングのサイズを加えたものです(この場合は0バイトです)。
まず、それぞれのサイズの ideone レポートを見てみましょう:
http://ideone.com/LAhop
わかりました、両方とも 1 です。したがって、共用体のサイズも 1 でなければなりません。
構造体はビットフィールドで構成されています。1 ビットは 1 ビット、1 ビットは 2 ビット、1 ビットは 3 ビットです。これにより、1 バイトの 8 ビットのうち合計 6 ビットが得られます。いずれにせよ、少なくとも 1 バイトでなければならないので (ビットフィールドは実際にはビット単位のサイズではありません)、サイズは 1 です。
char に関しては、§ 3.9.1/1 [ basic.fundamental ]で C++11 標準が述べていることは次のとおりです。
Objects declared as characters (char) shall be large enough to store any member
of the implementation’s basic character set.
ほとんどすべてのプラットフォームで、これは 1 バイトです。
これは 1 バイトです。
構造体 s は、1 バイトに収まる 1 + 2 + 3 = 6 ビットを占めており、1 バイトの char と結合しています。したがって、答えは 1 バイトです。