有两种函数允许编译器进行这些的转换:单参数构造函数(single-argument constructors)和隐式类型转换运算符。
隐式类型转换运算符只是一个样子奇怪的成员函数:operator 关键字,其后跟一个类型符号。你不用定义函数的返回类型,因为返回类型就是这个函数的名字。
举例如:
class Rational {
public:
...
operator double() const{return 1;} // 转换Rational类成
};
解决方法:
1、不要使用隐式转换,使用成员函数来显示转换。如string定义了一个成员函数c_str转为char *
2、加explicit在构造函数前。