我收集unrestricted unions了C++ 11中提出的功能之一.任何人都可以解释这背后的语义及其提供的优势吗?
Kla*_*aim 22
维基百科上有一个解释:http://en.wikipedia.org/wiki/C%2B%2B0x#Unrestricted_unions
在询问C++ 0x功能解释之前先搜索那里.
不受限制的工会
在标准C++中,对于哪些类型的对象可以是联合的成员存在限制.例如,联合不能包含任何定义非平凡构造函数的对象.C++ 0x将减轻这些限制,允许联合使用以前不允许使用的更多类型.[6] 这是C++ 0x中允许的联合的一个简单示例:
Run Code Online (Sandbox Code Playgroud)//for placement new #include <new> struct Point { Point() {} Point(int x, int y): x_(x), y_(y) {} int x_, y_; }; union U { int z; double w; Point p; // Illegal in C++; point has a non-trivial constructor. // However, this is legal in C++0x. U() { new( &p ) Point(); } // No nontrivial member functions are //implicitly defined for a union; // if required they are instead deleted // to force a manual definition. };这些更改不会破坏任何现有代码,因为它们只会放宽当前规则.
它只不过是我们一直拥有的旧工会,一个包含一个成员的不同类型的对象.
更改只是您现在可以在工会中存储非POD类型.但是,您将负责显式构造和销毁该成员.
从N3242:
[示例:考虑联合类型U的对象u,其具有类型为M的非静态数据成员m和类型为N的n.如果M具有非平凡的析构函数且N具有非平凡的构造函数(例如,如果它们声明或继承虚函数),u的活动成员可以使用析构函数和放置new运算符安全地从m切换到n,如下所示:
um~M();
新的(&u.n)N;
- 末端的例子]
IMO并不是一个广泛有用的功能.
| 归档时间: |
|
| 查看次数: |
12276 次 |
| 最近记录: |