Wenn ich schreibe Code wie folgt:Implizite Konvertierung und definierte Benutzer Umwandlung
struct foo {
operator int() const { return 1; }
};
int main() {
foo a, b;
auto tmp = (a < b);
}
es funktioniert, aber während ich Code wie folgt schreiben:
struct foo {
operator string() const { return string("foo"); }
};
int main() {
foo a, b;
auto tmp = (a < b);
}
Compiler (Klirren ++) sagt, dass error: invalid operands to binary expression ('foo' and 'foo')
ich frage mich, warum sowohl als string
Art und int
Typ haben Vergleichsoperatoren, aber wenn foo
hat ein Benutzer defi ned int
Umwandlung, wird es implizit zu int
konvertieren, um zu vergleichen, aber wenn foo
nur eine benutzerdefinierte string
Umwandlung hat, tut Compiler nicht implizite Konvertierung obwohl (string)a<(string)b
funktioniert gut.
ich nicht kenne die Regel, die das verursacht, aber am meisten l ikely hat es etwas mit 'zu tun int' ein in Art – user463035818
verwandt/Betrogene gebaut: http://stackoverflow.com/questions/42252023/implicit-conversion-operator-priority – NathanOliver
@NathanOliver imho Frage ist nicht wirklich eine Betrogene, aber Die Antwort erklärt auch genau diese – user463035818