Почему я не могу использовать оператор приведения в сравнениях? - PullRequest
2 голосов
/ 25 января 2012

Предположим, следующий код:

#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;
}

Сначала я сравниваю объект a с переменной int.Затем я пытаюсь сравнить его с переменной string, но программные файлы для компиляции.Со строкой, содержащей сравнение, закомментировано, это просто компилируется.В чем проблема?

1 Ответ

1 голос
/ 25 января 2012

Вы предоставили операторы преобразования для вашего класса int, а также std::string,
Это обеспечивает надлежащее преобразование.
Однако для работы == сравниваемые типы должны иметь== определено.
Язык обеспечивает неявное == для int типа, но == перегрузка оператора для std::string и, следовательно, ошибка.

...