explicit的用法
原创
©著作权归作者所有:来自51CTO博客作者alantop的原创作品,请联系作者获取转载授权,否则将追究法律责任
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)