为什么classMat的两个对象可以相加而不用重载运算符+?

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

来自link: https://docs.opencv.org/trunk/d3/d63/classcv_1_1Mat.html

operator+在Mat的定义中没有被重载class。 但是,可以使用 oprator+ 将 class 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 exprMatExpr 表达式正在其右侧进行计算。碰巧被评估的表达式是加法运算符,因此执行两个 cv::Mat 的加法,然后在表达式的左侧创建一个新矩阵。

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