【发布时间】:2014-01-21 04:29:53
【问题描述】:
以下代码将无法在 GCC 下编译,因为它确实定义了operator==,但没有定义operator!=。
struct A {
unsigned int m_i;
bool operator == (const A& rhs) const { return m_i == rhs.m_i; }
};
bool f(const A& lhs, const A& rhs) { return lhs != rhs; }
显然它想要任何一个
bool operator != (const A& rhs) const { return !(operator==(rhs)); }
或
bool operator != (const A& rhs) const { return m_i != rhs.m_i; }
普遍的看法似乎是这是因为!operator== 添加了一条指令,因此效率较低。这导致一些程序员尽职尽责地完整地写出他们复杂的!= 表达式,并且多年来我已经修复了许多由于运算符不匹配而导致的错误。
这种强制编写两个运算符是过早/遗留优化的情况,还是有一个很好的、可靠的、实际的理由来做这种我只是不知何故缺少的代码加倍?
【问题讨论】:
标签: c++ operators comparison-operators