Oracle® Solaris Studio 12.4:C++ 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

4.7 使用匿名 struct 声明

匿名 struct 声明是既不声明 struct 标记也不声明对象或 typedef 名称的声明。C++ 中不允许匿名 structs

-features=extensions 选项允许使用匿名 struct 声明,但仅作为联合的成员。

以下代码是无效匿名 struct 声明示例,如果使用 -features=extensions 选项,可对其进行编译。

union U {
  struct {
    int a;
    double b;
  };  // invalid: anonymous struct
  struct {
    char* c;
    unsigned d;
  };  // invalid: anonymous struct
};

struct 成员的名称是可视的,没有 struct 成员名称的限定。如果该代码示例中提供了 U 的定义,则可以编写:

U u;
u.a = 1;

匿名 structs 与匿名联合服从相同的限制。

请注意,可以通过为每个 struct 提供一个名称以使代码有效,例如:

union U {
  struct {
    int a;
    double b;
  } A;
  struct {
    char* c;
    unsigned d;
  } B;
};
U u;