explicit
When a constructor is specified as explicit, no automatic conversion will be used with that constructor -- but parameters passed to the constructor may still be converted. For example:
struct foo { explicit foo( int a ) : a_( a ) { } int a_; }; int bar( const foo & f ) { return f.a_; } bar( 1 ); // fails because an implicit conversion from int to foo // is forbidden by explicit. bar( foo( 1 ) ); // works -- explicit call to explicit constructor. bar( foo( 1.0 ) ); // works -- explicit call to explicit constructor // with automatic conversion from float to int.