Sdílet prostřednictvím


explicitní (C++)

Konstruktory C++, které mají pouze jeden parametr automaticky provést implicitní převod typu.Předáte-li například int konstruktor očekává řetězec parametr ukazatele, kompilátor přidá kód, musíte mít převést int na ukazatel na řetězec.Však není vždy vhodné toto automatické chování.

Můžete přidat explicit prohlášení konstruktor zabránit implicitní převody.To přinutí kód použít parametr správného typu nebo odevzdaných správný typ parametru.Je-li tavby není viditelně vyjádřené v kódu, dojde k chybě.

explicit Klíčových slov lze použít pouze třídy konstruktor prohlášení explicitně vytvořit objekt.

Příklad

Kompilace následující program ohlásí chyby.Kód se pokusí provést implicitní převod, ale použití explicitnebude klíčové slovo.Chcete-li potíže vyřešit, odeberte explicit klíčová slova a upravte kód v 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
}

Deklarování konstruktor, který má být více argumentů explicit nemá žádný vliv, protože takové konstruktory se nemohou účastnit implicitní převody.Však explicit bude mít vliv, pokud konstruktor více argumentů a všechny kromě jeden z argumentů má výchozí hodnotu.

Viz také

Referenční dokumentace

Klíčových slov jazyka C++

Převody