コンストラクタを明示的に定義するときに使用します。コンストラクタでの自動的な変換は行われなくなります。 ただし、パラメータコンストラクタに渡されたときは変換が行われます。サンプルを示します:
struct foo { explicit foo( int a ) : a_( a ) { } int a_; }; int bar( const foo & f ) { return f.a_; } bar( 1 ); // explicitによって、intからfooへの暗示的な変換が禁止されているため失敗します bar( foo( 1 ) ); // 動作します。explicitなコンストラクタを明示的に呼び出しています bar( static_cast<foo>( 1 ) ); // 動作します。明示的なキャストを使ってexplicitなコンストラクタが呼ばれます bar( foo( 1.0 ) ); // 動作します。intからfloatへの自動変換が行われ、 // explicitなコンストラクタを明示的に呼び出されています