0

今天,我刚刚注意到一个 C 结构中的语句,老实说,我一开始就像 WTF。它像是;

struct foo {
void *private;
//Some other members
};

信不信由你,这个结构正在被编译而没有任何错误。那么添加这样一行(void *private)的目的是什么?

4

3 回答 3

3

在纯 C 中没有private关键字,所以上面是完全合法的,尽管这是一个非常糟糕的主意。

虽然这将是无效的 C++,并且 C++ 编译器肯定会产生错误。

于 2013-05-23T22:54:32.877 回答
1

void*在 C 中经常用来隐藏实际使用的数据类型,有效地从接口中隐藏一些实现细节。

于 2013-05-23T22:57:03.783 回答
0

实际上,您偶然发现了 C 和 C++ 之间的一个重要区别,即实现结构的方式。

在 C 中,结构 contains 只能包含原始数据类型和复合数据类型,而 C++ 结构提供更多功能,因为 C++ 中的结构与 C 中的结构相比类似于类,因此它们提供了额外的功能,例如

  • 能够将成员分类为私有、公共或受保护的。
  • 可以包含成员函数。
  • C++ 中的结构可以用作强制面向对象方法的工具,因为适用于类的所有 OO 功能(如继承)也适用于结构。

所以简而言之,上面的代码是有效的C,但无效的C++。

于 2013-05-24T01:55:19.100 回答