C 關鍵字explicit的用法

2022-06-13 16:12:07 字數 1209 閱讀 7120

**下面c++程式的輸出:

#include using

namespace

std;

class

complex

//a method to compare two complex numbers

bool

operator ==(complex rhs)

}; int

main()

輸出:編譯通過,產生輸出。

same

在c++中,如果乙個類有乙個可以用單個引數呼叫的建構函式,那麼這個建構函式就變成了轉換建構函式,因為這樣的建構函式允許將單個引數轉換成正在構造的類。 我們可以避免這種隱式轉換,因為這可能會導致意想不到的結果。我們可以借助explicit使建構函式顯式化。例如,如果我們嘗試下面的程式,在建構函式中使用顯式關鍵字,我們會得到編譯錯誤。

#include using

namespace

std;

class

complex

//a method to compare two complex numbers

bool

operator==(complex rhs)

}; int

main()

輸出:編譯錯誤。

no match for 'operator==' in 'com1 == 3.0e+0'

我們仍然可以將double型別轉換為complex型別,但是現在我們必須要明確對它進行型別轉換。例如,下面這個程式就工作正常。

#include using

namespace

std;

class

complex

//a method to compare two complex numbers

bool

operator==(complex rhs)

}; int

main()

輸出:編譯通過,產生輸出。

same

C 關鍵字explicit的用法

explicit是顯示的意思。而且只能修飾建構函式。因為在類的建構函式中,凡是只帶乙個引數的建構函式,都定義了一組隱式轉化 把建構函式型別轉換為該類的型別。比如 class explicit virtual explicit 則 呼叫 explicit e 1 列印 explicit 建構函式 1 ...

C 關鍵字explicit的用法

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

explicit 關鍵字的用法

explicit 關鍵字的用法 只有乙個引數的建構函式在預設情況下隱含乙個轉換操作符,對沒有引數或引數個數大於 1 個的建構函式沒有此問題 看後面的特別說明 class x int m a int m b double m c x x int a 如果做如下呼叫 x x 10 10 被隱式轉化成了 ...