为什么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
expr
是 MatExpr
表达式正在其右侧进行计算。碰巧被评估的表达式是加法运算符,因此执行两个 cv::Mat
的加法,然后在表达式的左侧创建一个新矩阵。
这个故事的寓意是通过搜索文档来找到你的答案。这就是我发现它的方式。
来自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
expr
是 MatExpr
表达式正在其右侧进行计算。碰巧被评估的表达式是加法运算符,因此执行两个 cv::Mat
的加法,然后在表达式的左侧创建一个新矩阵。
这个故事的寓意是通过搜索文档来找到你的答案。这就是我发现它的方式。