结合C++11的新特性来解析C++中的枚举与联合

2020-01-06 14:21:27刘景俊

 

联合不能存储引用。 联合不支持继承,因此联合本身不能用作基类、继承自另一个类或具有虚函数。
初始化联合
可以通过指定包含在括号中的表达式来在相同语句中声明并初始化联合。 计算该表达式并将其分配给联合的第一个字段。


#include <iostream>
using namespace std;

union NumericType
{
  short    iValue;
  long    lValue; 
  double   dValue; 
};

int main()
{
  union NumericType Values = { 10 };  // iValue = 10
  cout << Values.iValue << endl;
  Values.dValue = 3.1416;
  cout << Values.dValue) << endl;
}
/* Output:
 10
 3.141600
*/

NumericType 联合排列在内存中(概念性的),如下图所示。

结合C++11的新特性来解析C++中的枚举与联合

匿名联合
匿名联合是声明的没有 class-name 或 declarator-list 的联合。
union { member-list }
匿名联合中声明的名称可直接使用,就像非成员变量一样。 因此,匿名联合中声明的名称必须在周边范围中是唯一的。
除了联合成员数据中列出的限制之外,匿名联合还受其他限制:
如果在文件或命名空间范围内声明联合,则还必须将它们声明为“静态的”。
它们可以只具有公共成员;匿名联合中的私有成员和受保护的成员会生成错误。
它们不能具有函数成员。



注:相关教程知识阅读请移步到C++教程频道。