gpt4 book ai didi

c++ - 定义运算符的实际原因!=

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:03:21 25 4
gpt4 key购买 nike

以下代码将无法在 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++ 时间框架的任何事物中)。

就其值(value)而言,C++ 标准的 §20.2.1 在 <utility> 中定义了许多重载。那会给你一个 !=基于 operator==和一个 > , >= , <=全部基于 operator< .

关于c++ - 定义运算符的实际原因!=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21249199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com