Condividi tramite


esplicito (C++)

Costruttori C++ che fanno semplicemente un parametro eseguire automaticamente la conversione implicita di tipi.Ad esempio, se si passa int quando il costruttore accetta un parametro del puntatore di stringa, il compilatore verrà aggiunto il codice necessarie per convertire int a un puntatore di stringa.Tuttavia, non è possibile sempre questo comportamento automatico.

È possibile aggiungere explicit nella dichiarazione di costruttore per impedire che le conversioni implicite.In questo modo il codice da utilizzare un parametro del tipo corretto, o eseguire il cast del parametro nel tipo corretto.Ovvero se il cast non è espresso in modo visivo nel codice, verrà generato un errore.

explicit la parola chiave può essere solo dichiarazioni si applica il costruttore di in-classe in modo esplicito per costruire un oggetto.

Esempio

Compilare il programma produce errori.Il codice tenta di eseguire una conversione implicita, ma l'utilizzo di explicitla parola chiave lo impedisce.Per correggere l'errore, rimuovere explicit le parole chiave e modificare il codice in 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
}

Dichiarando un costruttore con più argomenti siano explicit non ha effetto, perché tali costruttori non possono partecipare alle conversioni implicite.tuttavia, explicit avrà un effetto se un costruttore dispone di più argomenti e tutte tranne uno degli argomenti presenti un valore predefinito.

Vedere anche

Riferimenti

Parole chiave C++

Conversioni