C 中explicit的作用

2021-10-11 18:59:45 字數 1367 閱讀 2230

explicit用來防止建構函式定義中的隱式轉換

隱式轉換:可以用單個實參來呼叫的建構函式定義了從形參型別到該類型別的乙個隱式轉換。

class

things

intcompareto

(const things & other)

; std::string m_name;

int height;

int weight;

};

包含隱式轉換的使用示例;

things a;..

....

....

....

..//在這裡被初始化並使用。

std::string nm =

"book_1"

;//由於可以隱式轉換,所以可以下面這樣使用

int result = a.

compareto

(nm)

;

使用乙個string型別物件作為實參傳給things的compareto函式。

這個函式本來是需要乙個tings物件作為實參。

(隱式轉換)現在編譯器使用string nm來構造並初始化乙個things物件,新生成的臨時的things物件被傳遞給compareto函式,並在離開這段函式後被析構。

那麼這時候就可以通過將建構函式宣告為explicit,來防止隱式型別轉換。

explicit關鍵字只能用於類內部的建構函式宣告上,而不能用在類外部的函式定義上。

現在things類像這樣:

class

things

intcompareto

(const things & other)

; std::string m_name;

int height;

int weight;

};

這時你仍然可以通過顯式使用建構函式完成上面的型別轉換:

things a;..

....

....

....

..//在這裡被初始化並使用。

std::string nm =

"book_1"

;//顯示使用建構函式

int result = a.

compareto

(things

(nm)

);

explicit可以避免不合時宜的型別變換。

總結:所有單引數的建構函式都盡量使用顯式構造的

C 中explicit的作用

explicit作用 在c 中,explicit關鍵字用來修飾類的建構函式,被修飾的建構函式的類,不能發生相應的隱式型別轉換,只能以顯示的方式進行型別轉換。explicit使用注意事項 1.explicit 關鍵字只能用於類內部的建構函式宣告上 2.explicit 關鍵字作用於單個引數的建構函式 ...

c 中 explicit的作用

c 提供了 關鍵字explicit,可以阻止不應該允許的經過 轉換建構函式 進行的隱式轉換的發生。宣告為explicit的 建構函式 不能在隱式轉換中使用。c 中,乙個引數的建構函式 或者除了第乙個引數外其餘引數都有預設值的多參建構函式 承擔了兩個角色。1 是個構造器 2 是個預設且隱含的型別轉換操...

C 中explicit關鍵字的作用

explicit用來防止由建構函式定義的隱式轉換。要明白它的作用,首先要了解隱式轉換 可以用單個實參來呼叫的建構函式定義了從形參型別到該類型別的乙個隱式轉換。例如 class things intcompareto const things other std string m name inthe...