繁体   English   中英

C++ 中的运算符重载真的期望返回值吗?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM