5

以下のコードを検討してください。Myclass :: operator string()が定義されているのに、GCCコンパイラがMyclass :: operator string()を暗黙的に使用しようとしない理由がわかりません。

#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)
     */
}
4

1 に答える 1

2

文字列演算子はテンプレートであるため、他の演算子は取得できますが、取得することはできません。

于 2012-04-07T14:30:29.410 に答える