示例
class
MyClass {
public
:
MyClass
(
int
param
,
int
param2=0
);
operator
double
()
const
;
bool
operator
==(
const
MyClass
& left,
const
MyClass& right);
private
:
double
num;
};
int
main(
int
argc,
char
* argv[]){
MyClass a;
int
b[] = {0,1,2};
for
(int i=0; i<3; i++)
if
( a == b[i] ){
//b[i] implicitly converted to MyClass
}
}
}
解决方案
对于单自变量构造函数(不是副本构造函数)或编译器可能用于转换的构造函数,将构造函数声明为 explicit。编译器可能会使用隐式类型转换操作符,这不是我们所希望的,请显式使用定制方法。
class
MyClass {
public
:
explicit
MyClass
(
int
param,
int
param2=0);
double
toDouble()
const
;
bool
operator
==(
const
MyClass
& left,
const
MyClass& right);
private
:
double
num;
};
int
main(
int
argc,
char
* argv[]){
MyClass a;
int
b[] = {0,1,2};
for
(int i=0; i<3; i++)
if
( a.toDouble() == b[i] ){
//a explicitly converted to double
}
}
}