Un constructeur prenant un seul argument peut être utilisé pour effectuer des conversions automatiques de type vers le type de classe.
Quand un constructeur est défini avec le mot-clé explicit, les conversions automatiques de type sont désactivées pour ce constructeur.
Note : Ceci n'empêche pas la conversion automatique des paramètres, comme le montre l'exemple suivant :
struct foo { explicit foo( int a ) : a_( a ) { } int a_; }; int bar( const foo & f ) { return f.a_; } bar( 1 ); // Non permis, le mot-clé explicit interdit la conversion // automatique de int vers foo bar( foo( 1 ) ); // Ok, appel explicite du constructeur bar( static_cast<foo>( 1 ) ); // Ok, appel explicite du constructeur via un static cast bar( foo( 1.0 ) ); // Ok, appel explicite du constructeur, avec une conversion // automatique de float vers int