2012-01-25 96 views
2

假定以下代碼:爲什麼我不能在比較中使用演員操作?

#include <string> 
#include <iostream> 
using namespace std; 
struct A 
{ 
    operator int() 
    { 
     return 123; 
    } 
    operator string() 
    { 
     return string("abc"); 
    } 
}; 
void main() 
{ 
    A a; 
    cout<<(a==123)<<endl; 
    //cout<<(a==string("abc"))<<endl; 
} 

首先,我比較對象aint變量。然後,我試圖將它與一個string變量進行比較,但要編譯的程序文件。通過包含比較註釋的行,它編譯得很好。問題是什麼?

+2

你得到一個編譯錯誤?它說什麼?有沒有告訴你什麼?也許,這些參數類型沒有可用的'=='運算符重載? –

+0

嘗試使這些運算符'const'正確,以便您可以將它們用於'const A object;'。例如'operator int()const {...}'。 – iammilind

回答

1

您提供的轉換操作符爲你的類int以及std::string
這確保發生轉換適當。
然而,對於==工作進行比較的類型必須有一個==定義。
語言提供int類型但std::string==操作過載,因此錯誤的隱式==

+0

因此,概括地說,「詮釋的比較是一種語言功能,但字符串比較庫特徵」? –

+1

@KerrekSB:簡單地說,'的std :: string'相比,在使用'運營商=='不是由語言規範要求,但也許可能是由圖書館提供的功能。 –

+0

-1這似乎都是錯誤的。 C++標準描述了std :: string好吧。而這一切都與'operator =='是否是一個模板有關,而不是用戶定義的過載與內置。 – UncleBens

相關問題