Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C和C+中的嵌套结构+; 在C结构以外的嵌套结构之外,在C++中是否有任何意义?我没有发现任何参考或相关性 struct a { struct b{ }; }; int main(){ struct b var; // allowed in C not in C++. }_C++_C - Fatal编程技术网

C和C+中的嵌套结构+; 在C结构以外的嵌套结构之外,在C++中是否有任何意义?我没有发现任何参考或相关性 struct a { struct b{ }; }; int main(){ struct b var; // allowed in C not in C++. }

C和C+中的嵌套结构+; 在C结构以外的嵌套结构之外,在C++中是否有任何意义?我没有发现任何参考或相关性 struct a { struct b{ }; }; int main(){ struct b var; // allowed in C not in C++. },c++,c,C++,C,由于b作用域位于a内部,因此必须改用struct a::b(与C不同,struct关键字是可选的)。它在C中有效,因为C有一个名称空间,其中定义了所有非局部类型(即未在函数中声明的类型);没有使用名称空间或嵌套的类型范围 > C++中,类型 b>代码>嵌套为类 a < /COD>,因此它的名称必须与声明的范围相匹配。 < P>我相信C++中删除嵌套结构的能力在C++中被删除,以改进数据隐藏。如果需要从外部访问嵌套结构,那么首先它可能不应该是嵌套结构 维基百科说:“C++和C++中都可以定义嵌套

由于b作用域位于a内部,因此必须改用
struct a::b
(与C不同,struct关键字是可选的)。

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


<> > C++中,类型<代码> b>代码>嵌套为类<代码> a < /COD>,因此它的名称必须与声明的范围相匹配。

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

维基百科说:“C++和C++中都可以定义嵌套结构类型,但是范围不同地解释(C++中,嵌套结构仅在外部结构的范围/命名空间内定义)”()。它没有说明原因,但至少它承认了区别


您可以使用命名空间解析运算符访问Strut。但是

您不能声明C++中没有作用域的任何东西。 在你的例子中 结构b位于结构a内部,编译器不知道在哪里可以找到结构b

你必须使用

struct a :: b var;

<>在C中没有限制范围,但是C++确保C++中的限制

,你将使用<代码>:::b var;代码>不知怎么,我从来没有意识到有什么不同……不是操作员::只在C++中引入了不同范围的概念吗?为什么似乎要避免命名空间污染。在C中,嵌套结构域不是,因为内部声明的结构名被认为是在外部范围内。在C++中,嵌套类经常用作实现细节。因此,C++采用嵌套结构范围。“首先可能不应该是嵌套结构”。C不是有两个单独的全局名称空间用于标量类型名称和结构或类似的东西吗?@KerrekSB:是的,从某种意义上说。这里讨论的名称空间是标记名称空间(在
struct a{};
中,标记是
a
)参见ISO C99,6.2.1标识符范围,C99中结构范围的第7段。