sizeof空结构在C中为0,在C ++中为1为什么?

时间:2010-10-03 10:10:02

标签: c++ c struct sizeof

  

可能重复:
  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,则该类的两个对象将具有相同的地址,这是不可能的。我哪里错了?

3 个答案:

答案 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)

以下是一篇精彩的文章,描述了为什么会发生这种情况,并且更有针对性地说明一种(安全)方式:)

http://www.cantrip.org/emptyopt.html