【发布时间】:2016-06-12 18:52:57
【问题描述】:
我必须在 C++ 中为具有许多属性的类重载 == 运算符。
当且仅当所有属性都相等时,运算符应该返回 true。如果这些属性随时间发生变化,则可以使用快捷方式来避免错误。
有比较一个类中每个属性的快捷方式吗?
【问题讨论】:
-
如果您的对象是 POD 或它的大部分 POD(在那部分),您可以使用 memcmp
-
您可以编写一个脚本(在您的编辑器中,如果它支持的话。例如,Vim 正则表达式替换可以这样做)获取声明行的副本并将它们转换为
element == other.element &&跨度> -
@user3545806
memcmp不会考虑填充,所以这不起作用。 -
@Barry,如果你先 memset POD 部分然后使用 memcmp,它会起作用吗?但显然你是对的,我的评论缺少那个注释。
-
@VladimirS(和@Barry)关于
memcmp- 我认为这比你在这里说的更糟糕。即使使用 POD,即使 POD 已预先初始化(例如,归零),用户也可能会在带有可区分联合的极端情况下被烧毁。假设用户有一个带有一个 char 和一个 int(假设 8 位和 32 位)的 union,以及一个 union 外部的“标签”,以区分我们应该从 union 中读取 char 还是 int。如果“char”在每个标签的联合中是“活动的”,并且在语义上它们是相同的,memcmp仍然可能失败。