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
|
-
|
!
| void func()
{
B( A(3) );
}
|
が行われるんだそうです。
それを防ぐために,explicitキーワード。
1
2
3
4
5
|
-
|
!
| class B
{
explicit B( const A& );
}
|
こうすれば,勝手に変換されなくなるんだそうです。