gpt4 book ai didi

c++ - 二元运算符重载;隐式类型转换

转载 作者:太空狗 更新时间:2023-10-29 22:59:36 24 4
gpt4 key购买 nike

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) 相同的比较运算符?

最佳答案

删除第二个第二个参数上的 const 限定符以消除歧义:

friend my_bool operator==(const my_bool & instance_1, my_bool & instance_2);

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

关于c++ - 二元运算符重载;隐式类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36391795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com