explicitがどういう効果を持つのか,単純に知りませんでした。
ですので,その紹介。

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 
-
|
!
 
 
-
|
!
 
 
-
|
!
 
class A
{
  A( int );
}
 
class B
{
  B( const A& );
}
 
void func()
{
  B( 3 );
}

BのコンストラクタはAが引数の型なんだから
3を入れてら怒られるじゃない!

なんですが,実はこれ怒られないんです。

暗黙の変換(だったっけ?)というものが行われ,内部では

すべてを展開すべてを収束
  1
 
  B( A(3) );

が行われるんだそうです。
それを防ぐために,explicitキーワード。

すべてを展開すべてを収束
  1
  2
  3
  4
  5
 
-
|
!
 
class B
{
  explicit B( const A& );
}

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


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