7

为什么 C 中的空结构违反约束?为什么这条规则在 C++ 中会发生变化?

有什么历史原因吗?

4

2 回答 2

8

因为你在 C 中没有继承,所以你不需要它们。如果您只想拥有可区分的指针类型,则可以使用指向不完整类型的指针。

struct opaque;

struct opaque* stranger = 0;

应该可以正常工作。

于 2011-03-19T09:50:24.403 回答
3

我的猜测是这样的:

在 C 中,没有继承、模板和函数重载——我们在 C++ 中使用空结构的三个主要原因——作为基本接口、模板参数、帮助重载解析的类型。

你能想到 C 中空结构的任何实际用途吗?

于 2011-03-19T09:29:33.183 回答