败犬日报 2025-09-08
1. 怎么搞出 sizeof 是 0 的类型
C++ 不存在这个东西。标准不允许两个对象地址相同,如果 sizeof(T)
是 0,定义数组 T a[2];
就会有 a[0] a[1]
的地址相同,违背了要求。
cpp
#include <iostream>
struct A {
int a[0]; // warning: ISO C++ forbids zero-size array ‘a’
};
int main() {
std::cout << sizeof(A) << std::endl;
}
这个用 GCC 编译确实输出 0,但是这是编译器扩展(柔性数组)。而且 MSVC 输出是 4。