为什么Mat类的两个对象可以在不重载运算符+的情况下添加

Why can two objects of class Mat be added without overloading operator +?

本文关键字:重载 添加 情况下 运算符 对象 Mat 两个 为什么      更新时间:2023-10-16

从链接: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


因此,发生的情况是,用于赋值的重载运算符(=(是被调用的运算符,而MatExprexpr,它是MatExpr表达式,正在它的右手边被求值。因此,被求值的表达式恰好是加法运算符,因此执行两个CCD_ 11的相加,然后在表达式的左侧创建新矩阵。

这个故事的寓意是通过搜索文档来找到你的答案。我就是这样发现的。