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
。有没有一种方法可以解决这个问题,而无需记录同一比较运算符的3个过载(my_bool
,my_bool
),(bool
,my_bool
),(my_bool
,bool
)?二元运算符重载;隐式类型转换
不是答案,它会是一种障碍,但是你可以将你的构造函数标记为“明确的”(我不认为这是基于你的类名的好主意,因为你似乎希望隐式转换)。 – Tas
我不介意将'my_bool'转换为明确的'bool'转换,即''''''''''''''''''''''''显式运算符bool();'。我希望这样解决这个模棱两可的问题,但它并没有解决任何问题(我不知道为什么) – user3600124
嗯,我试过了,模糊性_does_消失了。 –