运算符重载是否真的需要返回值C++?

does operator overloading in C++ really expect a return value?

本文关键字:返回值 C++ 重载 是否 真的 运算符      更新时间:2023-10-16

我不明白以下代码片段之间的区别。一个有返回值,另一个没有。到底有什么区别?什么时候用什么?期待收到您的答复。

bool Distance::operator < (Distance d2) const 
{
float bf1 = feet + inches/12;
float bf2 = d2.feet + d2.inches/12;
return (bf1 < bf2) ? true : false;
}
operator float() const        //conversion operator
{                          //converts Distance to meters
float fracfeet = inches/12; //convert the inches
fracfeet += static_cast<float>(feet); //add the feet
return fracfeet/MTF; //convert to meters
}

最后一个是转换运算符,因此暗示它返回一个float- 您将值转换为此类型。

至于operator<,它具有返回类型,因为您实际上可以随心所欲地制作它。例如,C++标准库流的operator<<执行 I/O 而不是逻辑转换。

实际上,每当我们重载运算符时,开发人员都有责任保持运算符行为与语言中提到的相同。当我们开发可供数千名用户使用的代码时,每个人都没有时间检查我们代码的实现。

最小惊讶原则意味着系统的组件应该以大多数用户期望的方式运行;该行为不应使用户感到惊讶或惊讶。

https://www.modernescpp.com/index.php/c-core-guidelines-rules-for-overloading-and-overload-operators