运算符重载是否真的需要返回值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
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 如何从 std::thread 返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 方法错误"not all control paths return a value"和方法不返回值
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 对fread的返回值感到困惑
- 程序不向函数返回值
- 如何在另一个函数中使用返回值作为参数?
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 使用 std::p air 进行返回值优化
- C++输出参数与返回值