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;
- 3 回答
- 0 关注
- 544 浏览
添加回答
举报
0/150
提交
取消