是“匿名结构”标准吗?而且,实际上,它们是什么*?

MSDN 认为匿名结构在C ++中是非标准的:


Microsoft C扩展允许您在其他结构中声明结构变量而无需为其命名。这些嵌套结构称为匿名结构。C ++不允许匿名结构。


您可以访问匿名结构的成员,就像它们是包含结构中的成员一样。


有人告诉我,此功能不一定与仅创建未命名的结构相同,但我看不到标准措辞上的区别。


C ++ 11说:


[C++11: 9/1]:[..]一个类说明符,其类头省略了类头名,它定义了一个未命名的类。


并为缺少名称的类型定义提供完整的语法构造。


C ++ 03缺少这种明确的措辞,但类似地指出identifier类型定义中的in是可选的,并在9.4.2/5和中引用“未命名的类” 3.5/4。


那么MSDN是错误的,这些东西都是完全标准的吗?

还是在“未命名的结构/类”和用作成员的相同对象之间缺少一些微妙之处,以防止它们被此C ++ 03 / C ++ 11功能覆盖?

我是否缺少“未命名结构”和“匿名结构”之间的根本区别?在我看来,它们看起来像同义词。


慕娘9325324
浏览 518回答 3
3回答

ibeautiful

Microsoft称之为匿名结构的东西不是标准的。未命名的结构只是没有名称的普通结构。除非您还定义了该类型的对象,否则您将无能为力:struct {    int i;    double d;} my_object;my_object.d = 2.3;匿名联合是标准的一部分,通过阅读Microsoft对它们的匿名结构的描述,它们具有您期望的行为:union {    int i;    double d;};d = 2.3;
打开App,查看更多内容
随时随地看视频慕课网APP