分类: C/C++
2014-08-20 23:01:06
C++支持匿名联合,即:定义一个没有确定类型的无名类。这种特殊的联合只能包含非static数据成员;也不能定义、、或者其它什么成员函数。当在一个命名空间中声明匿名联合时(例如:在全局空间中),它就被声明为static类型。 下面是匿名联合的形式: union //没有名字 { //…member };//没有实例 匿名联合主要用来节约空间。例如:当你或者用ID,或者用关键字来确认的身份,但是并不是同时使用上面两者时。一个同时含有ID和关键字的匿名联合就能够保证:在任何时刻,只有其中一项能够被使用。这是因为联合的成员数据储存在同一段地址上,相互覆盖。 union { int ID; char* name; }; ID = 1234; retrieve_emp(ID, employee); 注意,你可以直接访问成员数据,就好像它们在联合外面声明的一样。 匿名联合的另一个用途是:自动类型转换(自动类型转换是不安全的)。例如:当要把一个指针看作时,你可以如下面的联合一样声明。 int some_val; union { void *p; int n; }; p = &some_val; 现在没有必要把指针显式的转为int类型的: str::cout << ”address of p is:” << n << std::endl;