C++ 奇怪的sizeof()结果
当我在Mac上运行sizeof(r)时。它表示sizeof(r)=1。我的理解是,工会的规模是其最大组成部分的规模。在这种情况下,最大的元素不应该是结构吗C++ 奇怪的sizeof()结果,c++,c,C++,C,当我在Mac上运行sizeof(r)时。它表示sizeof(r)=1。我的理解是,工会的规模是其最大组成部分的规模。在这种情况下,最大的元素不应该是结构吗 union { struct { char i:1; char j:2; char m:3; }s; char ch; }r; 结构s占用1+2+3=6位,适合1字节,并与1字节的字符联合。因此,答案是1字节。结构占用1+2+3=6位,适合1字节,并与1字节的
union
{
struct
{
char i:1;
char j:2;
char m:3;
}s;
char ch;
}r;
结构s占用1+2+3=6位,适合1字节,并与1字节的字符联合。因此,答案是1字节。结构占用1+2+3=6位,适合1字节,并与1字节的字符联合。因此答案是1字节。您的并集由两部分组成,一个结构和一个字符。联合的大小,因为它共享内存,是最大元素的大小,加上它所粘贴的任何填充的大小(在您的例子中是0字节) 首先,让我们看看每种格式的ideone报告的大小:
好的,两个都是1。因此,工会的规模也必须为1 结构由位字段组成。一个是1位,一个是2位,一个是3位。这样一个字节中的8位中总共有6位。由于它至少必须是一个字节(位字段的大小实际上不是以位为单位),因此大小为1 至于char,下面是C++11标准在§3.9.1/1[basic.basic]中所说的内容:
声明为字符(char)的对象应足够大以存储任何成员
实现的基本字符集。
对于几乎所有平台,这都是一个字节。这是一个字节。您的并集由两部分组成,一个结构和一个字符。联合的大小,因为它共享内存,是最大元素的大小,加上它所粘贴的任何填充的大小(在您的例子中是0字节) 首先,让我们看看每种格式的ideone报告的大小:
好的,两个都是1。因此,工会的规模也必须为1 结构由位字段组成。一个是1位,一个是2位,一个是3位。这样一个字节中的8位中总共有6位。由于它至少必须是一个字节(位字段的大小实际上不是以位为单位),因此大小为1 至于char,下面是C++11标准在§3.9.1/1[basic.basic]中所说的内容:
声明为字符(char)的对象应足够大以存储任何成员
实现的基本字符集。
对于几乎所有平台,这都是一个字节。这是一个字节。从技术上讲,您的位字段的总大小为0.75字节,字符的总大小为1字节。“我看不出问题所在。”克里斯,你能详细说明一下答案吗?谢谢可能在那一刻,r是char ch,而不是s struct。从技术上讲,您的位字段的总大小为0.75字节,char为1字节。“我看不出问题所在。”克里斯,你能详细说明一下答案吗?谢谢可能在那一刻,r是char ch,而不是s结构。划掉最后一句。这是字节的定义。联合的大小必须至少与其最大元素的大小相同。例如,
union x{short s;字符字节b[3];}
在我试过的一个平台上有4号,而short
有2号,而char[3]
有大小。。。3.@CharlesBailey,说得好,还有填充物。我会把它编辑进去,删掉最后一句。这是字节的定义。联合的大小必须至少与其最大元素的大小相同。例如,union x{short s;字符字节b[3];}
在我试过的一个平台上有4号,而short
有2号,而char[3]
有大小。。。3.@CharlesBailey,说得好,还有填充物。我将在中编辑它。