为什么Mat类的两个对象可以在不重载运算符+的情况下添加
Why can two objects of class Mat be added without overloading operator +?
从链接:https://docs.opencv.org/trunk/d3/d63/classcv_1_1Mat.html
运算符+在Mat类的定义中没有重载。但是,oprator+可以用于添加两个Mat类对象。这真的让我很困惑。
通过查阅cv::Mat
文档,您要查找的功能位于operator=(const MatExpr& expr)
下:https://docs.opencv.org/trunk/d3/d63/classcv_1_1Mat.html#a2a0798475170fb3a23b5bc63686de334
具体来说,这一部分的文件是有用的(重点是我的(:
这是一个重载成员函数,为方便起见而提供。它与上述函数的区别仅在于它接受的参数。
参数
expr
:分配的矩阵表达式对象与第一种形式的赋值操作相反,如果第二种形式的大小和类型适合矩阵表达式结果,则可以重用已分配的矩阵。它由矩阵表达式扩展到的实函数自动处理。例如,C=A+B
扩展到add(A, B, C)
,add负责自动重新分配C
因此,发生的情况是,用于赋值的重载运算符(=
(是被调用的运算符,而MatExpr
expr
,它是MatExpr
表达式,正在它的右手边被求值。因此,被求值的表达式恰好是加法运算符,因此执行两个CCD_ 11的相加,然后在表达式的左侧创建新矩阵。
这个故事的寓意是通过搜索文档来找到你的答案。我就是这样发现的。
相关文章:
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 运算符重载使用运算符+添加类模板
- 重载运算符与添加问题
- 运算符重载 += 添加新对象
- C++ 尝试将>>运算符重载添加到模板
- oStream 不打印添加两个 valarray 的结果(使用运算符重载)
- 使用运算符重载添加存储在 vector 中的类对象
- 我们可以在 c++ 中使用运算符重载添加 "User defined Datatype" + "Predefined Data Type"
- 链表重载添加
- 在 c++ 中使用运算符重载添加复数
- 使用运算符重载添加分数
- 使用重载添加两个矩阵的最佳方法是什么?
- C++重载添加无法正常工作
- 运算符重载+添加多个对象
- 为什么我无法使用运算符重载添加两个字符串?
- 运算符重载添加两个对象错误
- 将操作符重载添加到列表中
- C++ 使用运算符重载添加两个时间值