Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2884
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 35
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-20 22:51
文章分类
文章存档

2014年(3)

我的朋友
最近访客

分类: 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;
阅读(448) | 评论(0) | 转发(0) |
0

上一篇:C++结构体

下一篇:没有了

给主人留下些什么吧!~~