簡體   English   中英

C ++ less運算符使用轉換運算符

[英]C++ less operator uses conversion operator

我無法理解為什么對於以下虛擬類:

class Foo {
public:
    operator double() const {
        return 3.14;
    }
};

當我嘗試比較實例時:

Foo f1;
Foo f2;

auto res = f1 < f2;

較少的運營商使用現有的

operator double()const

比較價值時。 我在哪里可以找到這種行為的規則?

正如評論中所提到的,允許編譯器在此處進行1次用戶定義的轉換。 它看到它可以將兩個對象轉換為doubledouble則具有operator < ,所以它就是這樣做的。 如果您(程序員)要求它時只想使用轉換運算符,則可以添加以下explicit

explicit operator double() const {
    return 3.14;
}

現在,編譯器只能在您將其顯式轉換為此類型時調用它:

Foo f1;
double d = (double)f1; // conversion operator

您的編譯器“希望”使您的<請求正常工作。

沒有operator< for Foo ,但是它看到有一種方法可以將Foo轉換為double 有了這個,通過隱式轉換 ,您的比較將能夠成功。

如果運算符被標記為explicit (C ++ 11或更新),則此隱式轉換將是不可能的,編譯器將不得不放棄您的< request。

在通話期間選擇功能的規則非常復雜,所以如果我是你,我會相信它有效而不是試圖解析標准措辭。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM