在标准 C++ 中,并非任意的类型都能做为 union 的成员。比方说,带有 non-trivial 构造函数的类型就不能是 union 的成员。在新的标准里,移除了所有对 union 的使用限制,除了其成员仍然不能是引用类型。 这一改变使得 union 更强大,更有用,也易于使用。[1]
以下为 C++11 中 union 使用的简单样例:
struct point { point() {} point(int x, int y): x_(x), y_(y) {} int x_, y_; }; union { int z; double w; point p; // 不合法的 C++; point 有一 non-trivial 建構式 // 合法的 C++11 };
这一改变仅放宽 union 的使用限制,不会影响既有的旧代码。
核心语言能力的提升[编辑]
这些机能提供了C++语言能够做一些事情是以前所不能达成的,或是在以前需要繁琐的写法、要求一些不可移植的程序库。