explicit
Aus cppreference.com
< cpp
Ist ein Konstruktor als explicit ausgezeichnet, so wird er in keine automatische Typkonvertierung mit einbezogen. Parameter des Konstruktors selbst können aber sehr wohl implizit/automatisch umgewandelt werden.
Beispiel:
struct foo { explicit foo( int a ) : a_( a ) { } int a_; }; int bar( const foo & f ) { return f.a_; } bar( 1 ); // Scheitert, da eine implizite Konvertierung von int zu foo durch explicit // verboten wurde. bar( foo( 1 ) ); // Funktioniert -- ausdrücklicher Aufruf des explicit Konstruktors. bar( static_cast<foo>( 1 ) ); // Funktioniert -- Aufruf des explicit Konstruktors mittels // ausdrücklicher Typwandlung. bar( foo( 1.0 ) ); // Funktioniert -- ausdrücklicher Aufruf des explicit Konstruktors // mit automatischer Umwandlung von float zu int.