C+中“结构”与“类型结构”的区别?

C+中“结构”与“类型结构”的区别?

在C+中,在以下方面是否有区别:

struct Foo { ... };

typedef struct { ... } Foo;


慕码人2483693
浏览 538回答 3
3回答

RISEBY

在C+中,只有细微的差别。它是C的一个支撑,在C中它起了很大的作用。C语言标准(C89§3.1.2.3, C99§6.2.3,和C11§6.2.3)为不同类别的标识符指定单独的命名空间,包括标签标识符(为struct/union/enum)和普通标识符(为typedef和其他标识符)。如果你刚才说:struct Foo { ... };Foo x;您将得到一个编译器错误,因为Foo仅在标记命名空间中定义。你必须宣布它为:struct Foo x;任何时候,您想要引用Foo,你总要管它叫struct Foo..这会很快变得烦人,所以您可以添加一个typedef:struct Foo { ... };typedef struct Foo Foo;现在struct Foo(在标记命名空间中)并且只是普通的Foo(在普通标识符命名空间中)都引用相同的内容,您可以自由声明类型的对象。Foo没有struct关键词。结构:typedef struct Foo { ... } Foo;只是声明和typedef.最后,typedef struct { ... } Foo;声明匿名结构,并创建typedef为了它。因此,使用此构造,它在标记命名空间中没有名称,而在ty胡枝子名称空间中只有一个名称。这意味着它也不能提前宣布。如果要进行前向声明,则必须在标记命名空间中为其命名。.在C+中,所有struct/union/enum/class声明的行为就好像它们是隐式的。typedef‘ed,只要名称不被同名的另一个声明隐藏,请参见迈克尔·伯尔的回答全部细节。
打开App,查看更多内容
随时随地看视频慕课网APP