Przykład

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] jest niejawnie konwertowane do klasy MyClass
}
}
}

Rozwiązanie
W przypadku konstruktorów z jednym argumentem (które nie są konstruktorami kopiującymi) lub konstruktorów, których kompilator może używać do konwersji, zadeklaruj konstruktor jako jawny. Zamiast używania operatorów niejawnej konwersji typów, których kompilator może użyć nieoczekiwanie, jawnie wykorzystaj metody niestandardowe.

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 jest jawnie przekształcana w typ double
}
}
}