[英]binary operator overloading; implicit type conversion
class my_bool {
private:
bool value;
public:
my_bool(bool value) : value(value) {}
operator bool();
friend my_bool operator==(const my_bool & instance_1, const my_bool & instance_2);
};
void main(){
my_bool a = true;
bool b = false;
if(a == b){
// do something
}
}
编译器说比较运算符是不明确的。 编译器无法决定是否应将a
转换为bool
或b
应转换为my_bool
。 有没有一种方法可以解决这个问题,而无需写下my_bool
my_bool
3个重载( my_bool
, my_bool
),( bool
, my_bool
),( my_bool
, bool
)?
删除第二个参数上的const
qualifer以消除歧义:
friend my_bool operator==(const my_bool & instance_1, my_bool & instance_2);
或者使用显式
explicit operator bool();
或者使用不同的==
重载,这样更有意义:
class my_bool
{
private:
bool value;
public:
my_bool(bool value) : value(value) {}
operator bool() { return value; }
bool operator == (bool val)
{
return this->value == val;
}
};
你可以明确地将a
转换为bool
if(((bool) a) == b){ // yes, this is a cast.
// do something
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.