具有重载了equals运算符的成员(对象)的并集类

a union class with a member (object) that has overloaded equals operator

本文关键字:对象 成员 重载 equals 运算符      更新时间:2023-10-16

为什么联合类不能有重载了等于运算符的成员对象?限制是针对联合类的成员对象,而不是联合类的对象!

为什么我们不能在并集类中重载"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++中的并集类与普通类相比有一些限制。限制之一是重载=运算符。

这根本不是真的。

但是,如果成员之一具有用户定义的operator=,则联合本身也必须具有一个:

[C++11: 9.5/2]:[..][注意:如果联合的任何非静态数据成员具有非平凡的默认构造函数(12.1)、复制构造函数(12.8)、移动构造函数(12.8)、复制赋值运算符(12.8,必须由用户提供联合的相应成员函数,否则它将被隐式删除(8.4.3)--尾注][..]