Когда я пишу такой код:неявное преобразование и определенные пользователем преобразования
struct foo {
operator int() const { return 1; }
};
int main() {
foo a, b;
auto tmp = (a < b);
}
это работает, но в то время как я пишу такой код:
struct foo {
operator string() const { return string("foo"); }
};
int main() {
foo a, b;
auto tmp = (a < b);
}
Compiler (лязг ++) говорит, что error: invalid operands to binary expression ('foo' and 'foo')
Интересно, почему, поскольку оба типа string
и int
имеют операторы сравнения, но когда foo
имеет пользовательский указатель ned int
конвертировать, он будет подразумевать преобразование в int
, чтобы сравнить, однако, когда foo
имеет только определенный пользователем string
преобразование, компилятор не делает неявного преобразования, хотя (string)a<(string)b
работает хорошо.
Я не знать правило, которое вызывает это, но большинство l Вероятно, это связано с тем, что 'int' является встроенным типом – user463035818
, связанным/обманом: http://stackoverflow.com/questions/42252023/implicit-conversion-operator-priority – NathanOliver
@NathanOliver imho question на самом деле не обман, но ответ точно объясняет и этот – user463035818