範例

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
}
}
}