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.