具有重载了equals运算符的成员(对象)的并集类
a union class with a member (object) that has overloaded equals operator
为什么联合类不能有重载了等于运算符的成员对象?限制是针对联合类的成员对象,而不是联合类的对象!
为什么我们不能在并集类中重载"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)--尾注][..]
相关文章:
- 指向设备对象成员的指针
- 访问由unique_ptr传递的对象成员
- 引用对象成员函数的成员函数
- 将 C# 对象(包含静态对象成员)作为参数传递给 C++/CLI 程序
- Lua C API - 从C++分配和使用类的对象成员
- Rapidjson 遍历并获取复杂 JSON 对象成员的值
- 类对象成员变量在调用函数时不会更改
- 对象成员变量还是继承
- C++多态性:有没有办法找到对象成员函数的地址?
- 重载对象成员的比较运算符
- 获取未初始化对象成员的地址是否定义良好?
- 在优先级队列被推送到队列后,如何编辑对象成员
- 为什么在这里调用析构函数,以及在调用该对象析构函数后如何调用对象成员函数?
- 通过 std::bind 从对象成员检索值
- 保留对象成员变量的本地副本
- 有没有办法为静态对象成员定义一个符合开关标准的常量?
- 没有默认构造函数的对象成员的 wig setter
- 对象成员数组C++默认初始化
- 如何在数组中添加对象成员
- 使用聚合创建和关联两个不同的对象成员