Tim*_*ann 5 c++ operator-overloading
当重载operator ==()时,我目前正在
bool operator==(const X& lhs, const X& rhs)
{
return &lhs == &rhs || /* member comparisons ... */;
}
Run Code Online (Sandbox Code Playgroud)
意思是我首先检查对象的引用是否相等,然后检查所有成员的相等性。这是“正确”的方法吗?有什么需要记住的事情吗?这种实现方式是最有效的方法吗?
自我比较通常很少见,除非您是一个不可变的内部 pImpl,通常仅==在常规包装器发生碰撞或类似情况unordered_后才在容器中进行比较。std::hash
针对罕见情况进行优化通常是一个坏主意。它增加了代码的复杂性,并增加了测试开销。
如果比较成本高昂或无限昂贵,则可能存在异常,因此开始时失败的指针比较的成本微不足道。另一个例外是自我比较的成本异常昂贵,而几乎自我(几乎同样昂贵)的情况极其罕见,而自我比较有时会发生。
简而言之,保持代码简单,担心大阶爆炸,不要不必要地悲观,并在实际注意到性能问题后进行优化(即使只是“哇,太慢了”,或蒙特卡罗分析) 。