为什么C中的空结构违反约束?为什么在C ++中更改此规则?
有历史原因吗?
答案 0 :(得分:8)
因为你没有C中的继承,所以你不需要它们。如果您只想拥有可区分的指针类型,则可以使用指向不完整类型的指针。
struct opaque;
struct opaque* stranger = 0;
应该可以正常工作。
答案 1 :(得分:3)
我猜是这样的:
在C中,没有继承,模板和函数重载 - 我们在C ++中使用空结构的三个主要原因 - 作为基本接口,作为模板参数,作为帮助重载解析的类型。
你能想到在C中真正使用空结构吗?