Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
为什么 C 中的空结构违反约束?为什么这条规则在 C++ 中会发生变化?
有什么历史原因吗?
因为你在 C 中没有继承,所以你不需要它们。如果您只想拥有可区分的指针类型,则可以使用指向不完整类型的指针。
struct opaque; struct opaque* stranger = 0;
应该可以正常工作。
我的猜测是这样的:
在 C 中,没有继承、模板和函数重载——我们在 C++ 中使用空结构的三个主要原因——作为基本接口、模板参数、帮助重载解析的类型。
你能想到 C 中空结构的任何实际用途吗?