簡體   English   中英

為什么class 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 class 的定義中,operator+ 沒有重載。 但是,oprator+可以用來添加兩個class Mat的對象。 這真的讓我很困惑。

By consulting the cv::Mat documentation, the functionality you are looking for is under operator=(const MatExpr& expr) : https://docs.opencv.org/trunk/d3/d63/classcv_1_1Mat.html#a2a0798475170fb3a23b5bc63686de334

具體來說,文檔的這一部分很有用(強調我的):


這是一個重載成員 function,為方便起見提供。 它與上述 function 的不同之處僅在於它接受的參數。

參數

expr :分配的矩陣表達式 object。 與賦值操作的第一種形式相反,第二種形式可以重用已分配的矩陣,前提是它具有適合矩陣表達式結果的大小和類型 它由矩陣表達式擴展為的實際 function 自動處理。 例如, C=A+B擴展為add(A, B, C) ,並且 add 負責自動C重新分配。


因此,正在發生的事情是重載的賦值運算符 ( = ) 是被調用的,而MatExpr expr是一個MatExpr表達式,正在其右側進行評估。 碰巧被評估的表達式是加法運算符,因此執行兩個cv::Mat的加法,然后在表達式的左側創建一個新矩陣。

這個故事的寓意是搜索文檔以找到您的答案。 我就是這樣發現的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM