explicitがどういう効果を持つのか,単純に知りませんでした。 ですので,その紹介。 #code(C,){{ class A { A( int ); } class B { B( const A& ); } void func() { B( 3 ); } }} BのコンストラクタはAが引数の型なんだから 3を入れてら怒られるじゃない! なんですが,実はこれ怒られないんです。 暗黙の変換(だったっけ?)というものが行われ,内部では #code(C,){{ void func() { B( A(3) ); } }} が行われるんだそうです。 それを防ぐために,explicitキーワード。 #code(C,){{ class B { explicit B( const A& ); } }} こうすれば,勝手に変換されなくなるんだそうです。 |