共用方式為


明確 (C++)

C + + 建構函式具有一個參數會自動執行隱含型別轉換。 例如,如果您傳遞int建構函式必須為字串的指標參數,編譯器將會加入程式碼,它必須要有轉換int為字串的指標。 不過,您可能永遠都不要此自動的方式。

您可以將explicit來建構函式宣告,以避免隱含轉換。 這會強制程式碼使用正確的型別參數,或將參數轉換成正確的型別。 也就是說,如果轉換不明顯表示程式碼中,會產生錯誤。

explicit關鍵字只能套用至類別來明確地建構物件的建構函式宣告。

範例

編譯下列的程式,就會產生錯誤。 此程式碼嘗試執行隱含轉換,但使用explicit關鍵字可避免它。 若要解決這個錯誤,請移除explicit關鍵字,並調整中的程式碼g。

// spec1_explicit.cpp
// compile with: /EHsc
#include <stdio.h>

class C 
{
public:
    int i;
    explicit C(const C&)   // an explicit copy constructor
    {
        printf_s("\nin the copy constructor");
    }
    explicit C(int i )   // an explicit constructor
    {
        printf_s("\nin the constructor");
    }

    C()
    {
        i = 0;
    }
};

class C2
{
public:
    int i;
    explicit C2(int i )   // an explicit constructor
    {
    } 
};

C f(C c)
{   // C2558
    c.i = 2;
    return c;   // first call to copy constructor
}

void f2(C2)
{
}

void g(int i)
{
    f2(i);   // C2558
    // try the following line instead
    // f2(C2(i));
}

int main()
{
    C c, d;
    d = f(c);   // c is copied
}

宣告建構函式具有多個引數是explicit沒有任何反應,因為這類建構函式不能參與於隱含轉換。 不過, explicit的建構函式具有多個引數,以及所有,除了其中一個引數具有預設值將會有作用。

請參閱

參考

C + + 關鍵字

轉換