2012-04-07 58 views
5

Hãy xem xét mã bên dưới. Tôi không hiểu tại sao biên dịch GCC của tôi không cố gắng ngầm sử dụng MyClass :: string operator(), mặc dù MyClass :: string operator() được định nghĩa:Tại sao cần gọi một cách rõ ràng chuỗi Myclass :: operator() với std :: string :: operator +()?

#include <string> 

using namespace std; 

struct T { 
}; 

T operator+(const T& a, const T&b) { } 

struct Myclass { 
    operator string() const { } 
    operator T() const { } 
}; 

int main() { 
    T a; 
    string b; 
    Myclass c; 
    c + a; // OK 
    c.operator string() + b; // OK 
    c + b; // Not OK 
    /* The above line does not compile, although in <string> I see: 
    basic_string<_CharT, _Traits, _Alloc> 
    operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, 
      const basic_string<_CharT, _Traits, _Alloc>& __rhs) 
    */ 
} 
+2

Tôi tin rằng lý do là 'std :: operator +' là mẫu hàm và không phải là hàm. –

Trả lời

2

Bởi vì các nhà điều hành chuỗi là một mẫu, nó không thể được chọn trong khi các nhà điều hành khác có thể.

Các vấn đề liên quan