Ejemplo

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] convertido implícitamente en MyClass
}
}
}

Solución
Para los constructores de argumento individual (que no son constructores de copia) o los constructores que el compilador puede utilizar para la conversión, declare el constructor como explícito. En lugar de utilizar operadores de conversión de tipo implícito que el compilador puede utilizar de forma inesperada, utilice métodos personalizados explícitamente.

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 convertido explícitamente en double
}
}
}