为什么联合类不能有一个重载了equals运算符的成员对象?关于union类的成员对象的限制不是union类的对象!
答案 0 :(得分:1)
为什么我们不能在联合类中重载“equals”运算符?
我们可以。
这不是禁止的,它运作得很好。例如:
#include <cassert>
union T
{
int x;
int y;
T& operator=(const T& other)
{
x = other.x;
return *this;
}
bool operator==(const T& other)
{
return x == other.x;
}
};
int main()
{
T a{5};
T b{6};
a = b;
assert(a == b);
}
与普通类相比,c ++中的Union类有一些限制。其中一个限制是overloading = operator。
这根本不是真的。
但是,如果其中一个成员具有用户定义的operator=
,那么联盟本身也必须有一个:
[C++11: 9.5/2]:
[..] [注意: 如果联合的任何非静态数据成员具有非平凡的默认构造函数(12.1),复制构造函数(12.8),移动构造函数(12.8),复制赋值运算符(12.8),移动赋值运算符(12.8)或析构函数(12.4),对应的成员函数必须为用户提供用户提供或隐式删除(8.4.3)。 -end note] [..]