Příklad

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] implicitně převedeno na MyClass
}
}
}

Řešení
Pro konstruktory jednoho argumentu (které nejsou konstruktory kopie) nebo konstruktory, které může kompilátor použít pro převod, deklarujte konstruktor jako explicitní. Místo použití operátorů převodu implicitního typu, které může kompilátor použít neočekávaně, použijte explicitně vlastní metody.

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 explicitně převedeno na double
}
}
}