explicit用法,防止对象隐式被转换。

例子一:隐式转换

 



class
C
{

public
:

C ( int j );
int i;
};
C
::
C (int j)
{
i
=
j;
}
int main()
{
C c(
0
);
c
=

5
;
//
5被隐式转换


}


 

 

 



c  =   5   相当于


C temp( 5 ); //  实例化一个临时对象,
c  =  temp;  //  用 = 赋值
temp . C ::~ C();  //  temp 的析构函数被激活



 

 

如果类内的成员是一个指针,这种隐式转换是很危险的。为了防止这种隐式转换,我们把    C ( int j ); 改写为explicit     C ( int j );即可。

 

这下编译的时候,会不允许这种隐式的转换,出现如下提示:

 

 


Compiling



test
.
cpp
D
:
\DATUM\DATUM\PROJECT\Test_muable\test
.
cpp(
14
)
:
error C2679
:
binary
'
=
'

:
no operator
defined
which takes a right
-
hand operand of type
'
const int
'
(or there is no acceptable conversion)
Error executing cl
.
exe
.


Test_muable
.
exe
-

1
error(s)
,

0
warning(s)