gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:37:43 24 4
gpt4 key购买 nike

Possible Duplicates:
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));
}

正在打印 0当编译为 C 文件和 1当编译为 C++ 文件时。我想知道原因。我读到 sizeof C++ 中的空结构不为零,因为如果大小为 0那么类的两个对象将具有相同的地址,这是不可能的。我哪里错了?

最佳答案

C 中不能有空结构。这是违反句法约束的。但是 gcc 允许 C 中的空结构 as an extension .此外,如果结构没有任何命名成员,则行为是 undefined,因为

C99 说:

If the struct-declaration-list contains no named members, the behavior is undefined.

所以

struct Empty {}; //constraint violation

struct Empty {int :0 ;}; //no named member, the behaviour is undefined.

是的,空结构的大小是 C++ cannot be zero :)

关于c++ - sizeof 空结构在 C 中为 0,在 C++ 中为 1,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3849334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com