[英]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次用戶定義的轉換。 它看到它可以將兩個對象轉換為double
而double
則具有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.