具有重载equals运算符的成员(对象)的联合类

时间:2013-12-27 17:39:52

标签: c++

为什么联合类不能有一个重载了equals运算符的成员对象?关于union类的成员对象的限制不是union类的对象!

1 个答案:

答案 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);
}

Live demo


  

与普通类相比,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] [..]