C语言
#include<stdio.h>
struct Data {};
int main() {
printf("%ld\n", sizeof(struct Data));
return 0;
}
- Windows:C文件不允许定义空的struct
- Linux/Unix:大小为0
C++
#include<iostream>
using namespace std;
struct Data {};
int main() {
cout << sizeof(Data) << endl;
return 0;
}
- Windows/Linux/Unix:大小为1
在C语言中struct叫结构体变量,只需要内存即可,所以大小可以为0
而在C++中,struct不叫变量,而叫对象,不仅需要内存,还需要构造。构造时需要有一个this指针指向对象的地址,如果对象大小为0,就无法让this指针指向,所以空对象的大小为最小的内存单位1个字节。如果说有更小的类型能表示一个bit,那空对象也可以是1bit