Traduzioni di questa pagina?:

explicit

Quando un costruttore viene specificato come explicit non può essere fatta alcuna conversione automatica su quel costruttore, tuttavia i parametri passati al costruttore possono essere convertiti. Esempio:

class Foo {
 
    friend int bar( const Foo& );
 
    public:
    explicit Foo( int a )
       :var ( a )
    {}
 
    private:
    const int var;
};
 
int bar( const Foo& oggetto )
{
    return oggetto.var;
}
 
int main()
{
 
    bar( 1 );  // errore. Non è corretto. La key word prevede la conversione in modo esplicito e non in modo implicito, come in questo caso!
 
    bar( Foo( 1 ) );  // ok. Conversione esplicita
 
    bar( static_cast< Foo >( 1 ) );  // ok. Questo esempio produce lo stesso effetto dell'esempio precedente: conversione esplicita
 
    bar( Foo( 1.2 ) );  // ok. Questo esempio è legale. Nonostante sia corretto, il valore passato è di tipo float. Il costruttore accetta oggetti
                       //  interi, per questo che viene troncato, ottenendo un valore pari ad 1
    return 0;
}