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
or b
应转换为my_bool
。有没有办法可以解决这个问题而无需写下 3 个重载(my_bool
, my_bool
), (bool
, my_bool
), (my_bool
, bool
) 相同的比较运算符?
去除const
第二个参数上的限定符以消除歧义:
friend my_bool operator==(const my_bool & instance_1, my_bool & instance_2);
http://ideone.com/30VfO1 http://ideone.com/30VfO1
或者使用明确的
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;
}
};
http://ideone.com/fBaiKp http://ideone.com/fBaiKp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)