今天,我刚刚注意到一个 C 结构中的语句,老实说,我一开始就像 WTF。它像是;
struct foo {
void *private;
//Some other members
};
信不信由你,这个结构正在被编译而没有任何错误。那么添加这样一行(void *private)的目的是什么?
在纯 C 中没有private
关键字,所以上面是完全合法的,尽管这是一个非常糟糕的主意。
虽然这将是无效的 C++,并且 C++ 编译器肯定会产生错误。
void*
在 C 中经常用来隐藏实际使用的数据类型,有效地从接口中隐藏一些实现细节。
实际上,您偶然发现了 C 和 C++ 之间的一个重要区别,即实现结构的方式。
在 C 中,结构 contains 只能包含原始数据类型和复合数据类型,而 C++ 结构提供更多功能,因为 C++ 中的结构与 C 中的结构相比类似于类,因此它们提供了额外的功能,例如
所以简而言之,上面的代码是有效的C,但无效的C++。