Anonymous Unions

union  {  member-list  }  

Anonymous unions are unions that are declared without a class-name or declarator-list.

Such union declarations do not declare types — they declare objects. The names declared in an anonymous union cannot conflict with other names declared in the same scope.

In C, an anonymous union can have a tag; it cannot have declarators.

Names declared in an anonymous union are used directly, like nonmember variables. The following example illustrates this:

#include <iostream.h>

void main()
{
  union
  {
    double d;
    char *f;
  };

  double c = 3.3;
  char *e = "outside of union";

  d = 4.4;
  f = "inside of union";

  cout << c << ' ' << d << endl;
  cout << e << endl << f << endl;
}

In addition to the restrictions listed in Union Member Data, anonymous unions are subject to additional restrictions:

  • They must also be declared as static if declared in file scope. If declared in local scope, they must be static or automatic.
  • They can have only public members; private and protected members in anonymous unions generate errors.
  • They cannot have function members.

Note   Simply omitting the class-name portion of the syntax does not make a union an anonymous union. For a union to qualify as an anonymous union, the declaration must not declare an object.