带返回值的操作重载(或类似的东西)
operation overloading with return value (or something like that)
我必须重载一个操作符,就像这样。
max(matrix)=11;
有一个函数max,它返回矩阵中最大的数。这一行必须将最大值设置为11。问题是:如何声明这个操作符重载?
这里没有操作符重载,除了max(matrix)
应该返回一些重载了operator=(int)
的用户定义类型,这是没有必要的。
从技术上讲,要使这行代码像你描述的那样工作,你可以做的是返回对矩阵的max元素的(非const)引用:
int& max(Matrix& mx) { /* ... */ }
这里不需要操作符重载。然后,这行代码将保存最大值的元素设置为11。但是,在此之后,最大值可能不会设置为11。考虑这个矩阵:
/ 5 32 10
| 11 3 64 |
10 2 0 /
显然最大值是64,但在您的行之后,最大值将是第一行中的32。
然而,有一个max
函数做我所描述的,不是一个好主意,因为它不做人们通常期望从这样一个函数。可能是一个简单的重命名使它更清楚:标准库使用max_element
类似的函数,而max
只返回集合的最大值,不允许修改它。
PS:一个函数,确保给定矩阵的最大值是11与你提供的语法是可能的,但更不直观,所以我不会诱惑你提供一个坏的例子;-)
相关文章:
- 从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的返回值感到困惑
- 继承的加法赋值操作,如何返回正确的类型
- C++类函数返回值 VS 对本地数据进行操作
- 在一个方法内部,操作另一个方法的返回值
- 为单元测试操作内部函数的返回值
- 带返回值的操作重载(或类似的东西)