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
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 
 
 
 
 
 
 
-
|
|
|
!
 
 
 
 
#spanadd
 
#spanend
#spanadd
void func()
#spanend
#spanadd
{
#spanend
  B( A(3) );
#spanadd
}
#spanend
#spanadd
 
#spanend

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

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

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


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