C和C ++中的嵌套结构

在C中允许嵌套结构在结构外可见但是在C ++中没有任何意义吗? 我没有找到任何参考或相关性。

struct a { struct b{ }; }; int main(){ struct b var; // allowed in C not in C++. } 

它在C中有效,因为C具有单个名称空间,其中定义了所有非本地类型(即,未在函数中声明的类型); 没有使用命名空间或嵌套的类型的范围。

在C ++中,类型b嵌套为类a的成员,因此其名称必须使用声明它的作用域进行限定。

我相信在C ++中删除了引用结构之外的嵌套结构的能力,以改善数据隐藏。 如果需要从外部访问嵌套结构,那么它可能不应该是首先嵌套的结构。

维基百科说:“在C和C ++中,可以定义嵌套的结构类型,但范围的解释方式不同(在C ++中,嵌套结构仅在外部结构的范围/命名空间内定义)。” ( http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B )。 它没有说明原因 ,但至少它承认了差异。

但是,您可以使用命名空间解析运算符来访问结构。

因为b范围在a里面,你必须使用struct a::b (而不像在C中,struct关键字是可选的)。

你不能在没有C ++范围的情况下声明任何东西在你的例子中,struct b位于struct a里面,编译器不知道在哪里找到struct b

你必须使用

 struct a :: b var; 

在C中,范围没有限制,但C ++确保了限制