Esempio

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

Soluzione
Per costruttori a singolo argomento (che non sono costruttori copy) o costruttori che il compilatore utilizza per la conversione, dichiarare il costruttore come esplicito. Invece di utilizzare gli operatori di conversione di tipo implicito che il compilato re utilizzata in maniera imprevista, utilizzare i metodi personalizzati esplicitamente.

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