Exemple

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] implicitement converti en MyClass
}
}
}

Solution
Pour les constructeurs à argument unique (qui ne sont pas des constructeurs de copie) ou pour les constructeurs que le compilateur peut utiliser pour la conversion, déclarez ces constructeurs comme étant explicites. Au lieu d'introduire des opérateurs de conversion de type implicite que le compilateur risque d'utiliser à mauvais escient, recourez explicitement à des méthodes personnalisées.

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 explicitement converti en double
}
}
}