[英]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.