Partager via


explicite (C++)

Constructeurs C++ qui font exécuter un seul paramètre automatiquement la conversion de type implicite.Par exemple, si vous passez int lorsque le constructeur attend un paramètre de pointeur de chaîne, le compilateur ajoute le code qu'il doit peut-être convertir int à un pointeur de chaîne.Toutefois, vous ne pouvez pas toujours peut-être ce comportement automatique.

Vous pouvez ajouter explicit à la déclaration de constructeur pour empêcher les conversions implicites.Cela force le code à utiliser un paramètre de type approprié, ou casté le paramètre en type correct.Autrement dit, si le cast n'est pas visiblement exprimé dans le code, une erreur se produira.

Le mot clé d' explicit peut être que des déclarations appliquées de constructeur de dans-classe pour construire explicitement un objet.

Exemple

Compilation d'un programme suivant produira des erreurs.Le code essaie de effectuer une conversion implicite, mais l'utilisation du mot cléd' explicitl'empêché.Pour corriger l'erreur, supprimer les mots clés d' explicit et modifier le code dans 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
}

La déclaration d'un constructeur qui a plusieurs arguments à être explicit n'a aucun effet, parce que ces constructeurs ne peuvent pas participer aux conversions implicites.Toutefois, explicit aura un effet si un constructeur a plusieurs arguments et tous sauf si l'un des arguments a une valeur par défaut.

Voir aussi

Référence

Mots clés C++

Conversions