在C中允许嵌套结构在结构外部的可见性是否有任何意义,但在C++中却没有?我没有找到任何参考或相关性.
struct a
{
struct b{
};
};
int main(){
struct b var; // allowed in C not in C++.
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*lis 34
它在C中有效,因为C有一个名称空间,其中定义了所有非本地类型(即未在函数中声明的类型); 没有使用命名空间或嵌套的类型范围.
在C++中,type b被嵌套为类的成员a,因此其名称必须使用声明它的作用域进行限定.
我相信在C++中删除了引用结构之外的嵌套结构的能力,以改善数据隐藏.如果您需要从外部访问嵌套结构,那么它可能不应该是首先嵌套的结构.
维基百科说:"在C和C++中,可以定义嵌套的结构类型,但范围的解释方式不同(在C++中,嵌套结构仅在外部结构的范围/命名空间内定义)." (http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B).它没有说明原因,但至少它承认了这一点.
但是,您可以使用命名空间解析运算符来访问结构.