Top > C++ > コンストラクタにexplicitをお忘れなく

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& );
}

}}

こうすれば,勝手に変換されなくなるんだそうです。

    ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS