C++联合体union用法实例详解

2020-01-06 13:13:54丽君

6、匿名联合

匿名联合仅仅通知编译器它的成员变量共同享一个地址,而变量本身是直接引用的,不使用通常的点号运算符语法.

例如:

 

 
  1. #include <iostream>  void main() 
  2. {  union{  
  3. int test;  char c;  
  4. };   test=5; 
  5. c='a';  std::cout<<i<<" "<<c; 

正如所见到的,联合成分象声明的普通局部变量那样被引用,事实上对于程序而言,这也正是使用这些变量的方式.另外,尽管被定义在一个联合声明中,他们与同一个程序快那的任何其他局部变量具有相同的作用域级别.这意味这匿名联合内的成员的名称不能与同一个作用域内的其他一直标志符冲突.

对匿名联合还存在如下限制:

因为匿名联合不使用点运算符,所以包含在匿名联合内的元素必须是数据,不允许有成员函数,也不能包含私有或受保护的成员。还有,全局匿名联合必须是静态(static)的,否则就必须放在匿名名字空间中。

7、几点需要讨论的地方:

1)联合里面那些东西不能存放?

我们知道,联合里面的东西共享内存,所以静态、引用都不能用,因为他们不可能共享内存。

2)类可以放入联合吗?

我们先看一个例子:

 

 
  1. class Test  { 
  2. public:  Test():data(0) { } 
  3. private:  int data; 
  4. };  typedef union _test 
  5. {  Test test;  
  6. }UI;