[英]When an object provides both `operator!` and `operator bool`, which is used in the expression `!obj`?
我遇到了一個我無法自己回答的問題。 此外,我沒有在谷歌和這里找到答案。 比如,我想在if子句中“檢查對象的有效性”,如下所示:
MyClass myObject;
// [some code, if any]
if (!myObject)
{
// [do something]
}
讓MyClass
定義如下:
class MyClass
{
public:
MyClass() { };
virtual ~MyClass() { };
bool operator!()
{
return !myBool;
};
operator bool()
{
return myBool;
};
private:
bool myBool = 0;
};
我現在的問題是:在這個if子句中實際使用了哪一個重載運算符? 無論哪種方式,結果顯然都是一樣的。
它將使用operator!
。
將優先選擇參數類型與參數匹配的函數,而不是需要類型轉換的函數。
你會找到那個operator !
被執行因為它是最直接的解決方案。 如果它使用operator bool
而不是它必須首先調用轉換運算符,然后應用!
與此分開。
作為一般規則,盡管避免這種情況是個好主意。 通常更好的方法是定義bool
轉換,因為嚴格來說這就是你希望你的邏輯運算符所做的事情,而不是直接的MyClass
。 定義兩者都會產生一些可讀性問題,並且是冗余代碼復制的一種形式(將來可能導致程序員錯誤)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.