範例
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] 隱含地轉換成 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 明確轉換成 double
}
}
}