可能重复:
Empty class in C++
What is the size of an empty struct in C?
我在某处看到C ++中空结构的大小为1.所以我想到验证它。
不幸的是我将它保存为C文件并使用了<stdio.h>
标题,我很惊讶地看到输出。它是0。
这意味着
struct Empty {
};
int main(void)
{
printf("%d",(int)sizeof(Empty));
}
在编译为C文件时打印0,在编译为C ++文件时打印1。我想知道原因。我读到c ++中的sizeof空结构不为零,因为如果大小为0,则该类的两个对象将具有相同的地址,这是不可能的。我哪里错了?
答案 0 :(得分:15)
C中不能有空结构。这是一种语法约束违规。 但是gcc允许C as an extension中的空结构。 此外,如果结构没有任何命名成员,则行为未定义,因为
C99
说:
如果struct-declaration-list不包含命名成员,则行为未定义。
所以
struct Empty {}; //constraint violation
struct Empty {int :0 ;}; //no named member, the behaviour is undefined.
是的,空结构的大小是C ++ cannot be zero:)
答案 1 :(得分:8)
有几个很好的理由。其中,这是为了确保指向该结构指针的指针算术不会导致无限循环。更多信息:
http://bytes.com/topic/c/insights/660463-sizeof-empty-class-structure-1-a
答案 2 :(得分:5)
以下是一篇精彩的文章,描述了为什么会发生这种情况,并且更有针对性地说明一种(安全)方式:)