示例

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

解决方案
对于单自变量构造函数(不是副本构造函数)或编译器可能用于转换的构造函数,将构造函数声明为 explicit。编译器可能会使用隐式类型转换操作符,这不是我们所希望的,请显式使用定制方法。

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