用匿名联合来节省空间

ZDNet软件频道 时间:2003-09-17 作者:ZDNet China |  我要评论(1)
本文关键词:cpptips
C++支持匿名联合,即:定义一个没有确定类型的无名类。这种特殊的联合只能包含非static数据成员;也不能定义构造函数、析构函数、或者其它什么成员函数。匿名联合主要用来节约空间。
本文译自Builder.com,未经许可请勿转载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;


本文作者Danny Kalev 是一个系统分析家、软件工程师,在C++和面向对象设计方面有着14年的专业经验。


责任编辑:炒饭

欢迎评论投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134