從OpenCV原始碼學習cpp const

2021-07-15 19:26:31 字數 1036 閱讀 4181

cpp中的const的用法,似乎有些複雜。const告訴編譯器,我希望指定某種不被修改的東西,而具體是什麼東西不被修改,則根據const的位置決定。

templateclass vec : public matx<_tp, cn, 1>

;

vec mul(const vec<_tp, cn>& v) const; // 1
這很好理解,vec前面的const,修飾了v,v在這個方法內部是不可改變的。

vec mul(const vec<_tp, cn>& v) const; // 1
const修飾的mul方法,使得這個方法內部是無法修改當前物件(this指標指向的物件)的資料成員。實際上,這個const的實質作用效果是,把this指標變成const型,所以this指向的成員變數也都帶上了const的約束。

const _tp& operator (int i) const;  // 2
當函式返回的變數是const時,就需要在返回值型別前面新增const修飾符。這種情況下這個const如果省略,會報錯,因為返回值本身已經是const型。在這個例子中,返回值是成員變數,由於this已被const修飾,所以這裡的const不能省略。

當然如果返回值不是const,也可以新增const,把返回值變成const型。

另外

const _tp& operator (int i) const;  // 2

_tp& operator(int i);

常常這兩句話同時出現,什麼時候決定呼叫哪個呢?取決於this指標是不是const型。

const vec v1;

vec v2;

v1的this指標是const型,v1[i]會呼叫第一句;而v2不是,v2[i]會呼叫第二句。換乙個角度講,只有同時定義了這兩句話,才可以自由地選擇是否使用const修飾物件,同時不影響使用操作符。

opencv原始碼檢視

1 針對opencv自帶的函式 cv.h中宣告的函式 可直接選擇函式,右鍵轉到宣告 h檔案 或轉到定義 cpp檔案 2 source modules下的函式不能直接跳轉到定義,需要先編譯,此處用cmake編譯原始碼 a 安裝,官網中包括源 sources 需自己編譯 和二進位制檔案 已編譯好 此處選...

OpenCV原始碼閱讀 1

開始從讀取檔案的函式說起,這裡主要有兩個函式用於讀取影象的 實際上,當我們在做數字影象處理系統的時候,主要要考慮的也是怎麼讀乙個進來。第乙個函式 cvloadimage主要是用於返回乙個iplimage 的資料結構。第二個函式 cvloadimagem主要是用於返回乙個cvmat 的資料結構。實際上...

Opencv原始碼閱讀 HogDescriptor

opencv中hog特徵提取寫在類hogdescriptor中 預設的建構函式如下 cv wraphogdescriptor winsize 64,128 blocksize 16,16 blockstride 8,8 cellsize 8,8 nbins 9 derivaperture 1 win...