首页>Program>source

在C中允许嵌套结构的可见性超出C,但在C ++中不允许可见? 我没有发现任何参考或相关性。

struct a
{
  struct b{
  };
};
int main(){
  struct b var;  // allowed in C not in C++.
}
最新回答
  • 2天前
    1 #

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

    在C ++中,键入 b 被嵌套为 a类的成员 ,所以它的名称必须在声明它的范围之内。

  • 2天前
    2 #

    我相信在C ++中已删除了引用结构外部的嵌套结构的功能,以改善数据隐藏.如果您需要从外部访问嵌套结构,那么一开始就不应该将其作为嵌套结构。

    维基百科说:"在C和C ++中,都可以定义嵌套的结构类型,但是作用域的解释不同(在C ++中,嵌套的结构仅在外部结构的作用域/命名空间中定义). (http://zh.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B).它没有说为什么,但是至少它承认了区别。

    您可以使用名称空间解析运算符来访问结构。

  • 2天前
    3 #

    因为b范围位于a内,因此必须使用 struct a::b 相反(与C语言不同,struct关键字是可选的。)

  • 2天前
    4 #

    如果没有C ++中的作用域,则不能声明任何内容 在你的例子中 struct b位于struct a内,编译器不知道在哪里可以找到struct b

    您必须使用

    struct a :: b var;
    

    在C语言中,对范围没有限制,但是C ++确保了限制

  • c#:通过反射获取MemberInfo的类型
  • 如何在两个不同的Perl脚本之间共享/导出全局变量?