为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
慕娘9325324 2019-09-24 15:35:58
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功能覆盖?我是否缺少“未命名结构”和“匿名结构”之间的根本区别?在我看来,它们看起来像同义词。
查看完整描述

3 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

Microsoft称之为匿名结构的东西不是标准的。未命名的结构只是没有名称的普通结构。除非您还定义了该类型的对象,否则您将无能为力:


struct {

    int i;

    double d;

} my_object;


my_object.d = 2.3;

匿名联合是标准的一部分,通过阅读Microsoft对它们的匿名结构的描述,它们具有您期望的行为:


union {

    int i;

    double d;

};


d = 2.3;


查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 514 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信