c++ anonymous union,struct -- 匿名联合体和机构体

c++ anonymous union,struct -- 匿名联合体和机构体

结构体和联合体各自的基本用法不赘述,仅说一下他们匿名时访问的情况。如果是token不同,可以直接跨层访问。例子

  • #include <iostream>
  • using namespace std;
  • struct zoo_obj{
  •         string name;
  •         union {
  •                 unsigned int property;
  •                 struct{ //plant
  •                         unsigned int
  •                                 hasLeaf:1,
  •                                 hasFlower:1,
  •                                 hasTrunk:1,
  •                                 hasRattan:1;
  •                 };
  •                 struct { //animal
  •                         unsigned int
  •                                 isBackbone:1,
  •                                 isOvipara:1,
  •                                 hasLags:1,
  •                                 hasWing:1;
  •                 };
  •         };
  • };
  • int main(void)
  • {
  •         zoo_obj peony = {"peony",0};
  •         zoo_obj dog = {name:"dog",0};
  •         dog.hasLags = true;
  •         /* zoo_obj dog = {name:"dog",property:0};
  •          * sorry, unimplemented: non-trivial designated initializers
  •          * not supported
  •          */
  •         cout << peony.name << " hasLeaf " << peony.hasLeaf << endl;
  •         cout << dog.name << " hasLags " << dog.hasLags << endl;
  • }
  • 输出
  • peony hasLeaf 0
  • dog hasLags 1
  • 不支持像列子中name样的指定访问。如果指定了会报错
  • sorry, unimplemented: non-trivial designated initializers not supported
  •