Nin*_*age 33 c c++ struct sizeof
可能重复:
C++中的空类C
中空结构的大小是多少?
我在某处看到C++中空结构的大小为1.所以我想到验证它.不幸的是我把它保存为C文件并使用了<stdio.h>标题,我很惊讶地看到了输出.这是0.
这意味着
struct Empty {
};
int main(void)
{
printf("%d",(int)sizeof(Empty));
}
Run Code Online (Sandbox Code Playgroud)
在编译为C文件时打印0,在编译为C++文件时打印1.我想知道原因.我读到c ++中的sizeof空结构不为零,因为如果大小为0,则该类的两个对象将具有相同的地址,这是不可能的.我哪里错了?
Pra*_*rav 15
你不能在C中有一个空结构.这是一个语法约束违规.但是gcc允许C中的空结构作为扩展.此外,如果结构没有任何命名成员,则行为是未定义的
C99 说:
如果struct-declaration-list不包含命名成员,则行为未定义.
所以
struct Empty {}; //constraint violation
struct Empty {int :0 ;}; //no named member, the behaviour is undefined.
Run Code Online (Sandbox Code Playgroud)
是的空结构的大小是C++ 不能为零 :)
有几个很好的理由.其中,这是为了确保指向该结构指针的指针算术不会导致无限循环.更多信息:
http://bytes.com/topic/c/insights/660463-sizeof-empty-class-structure-1-a
| 归档时间: |
|
| 查看次数: |
21145 次 |
| 最近记录: |