C++中未调用的RotaryEncoder类public地址比较operator==用途疑问
该operator==重载的核心作用
这个成员函数重载了等于比较运算符,作用是判断两个RotaryEncoder对象是否为内存中的同一个实例:
- 当你用
a == b的形式比较两个RotaryEncoder引用/对象时,会对比当前对象的地址(this)和传入对象b的地址(&b),只有两者地址完全一致、是同一个实例的时候才会返回true,否则返回false。 - 和常规的逐成员对比值的相等判断不同,它的判断逻辑是「身份相等」而非「值相等」,适合需要严格区分不同实例的场景。
未在现有代码中被调用的常见原因
你在当前代码库里没找到直接调用的记录,不代表这个实现是冗余的,常见场景包括:
- 这是通用类库的预置实现:如果这个
RotaryEncoder是公共类库的组件,这个运算符是提供给类库的调用方使用的,类库本身的代码不需要调用,不代表外部使用者不会用到。 - 为标准库组件适配预留:如果你后续要将
RotaryEncoder对象放入标准库容器、或者搭配std::find等泛型算法使用,这些逻辑可能会隐式调用==运算符,提前实现可以避免后续使用时报错。 - 后续业务功能预留:开发阶段先把基础的常用运算符实现完毕,后续要做实例去重、实例检索这类逻辑时可以直接使用,不需要临时补写。
补充说明
当前实现存在一个小的规范问题:参数没有加const修饰、成员函数本身也没有标记为const,无法用于const修饰的RotaryEncoder对象比较,更规范的写法应该是:
bool RotaryEncoder::operator==(const RotaryEncoder& b) const { return this == &b; }
内容的提问来源于stack exchange,提问作者Hitachii
相关产品推荐
相关产品推荐

