Hier ist mein Code:
%Vor%Ich bekomme einen Kompilierfehler:
%Vor%Ich frage mich, warum die implizite Umwandlung von char * in string hier nicht funktioniert?
AKTUALISIEREN Antons Antwort macht Sinn, ich habe den Code aktualisiert:
%Vor%Jetzt kompiliert es.
§13.3.1.2 Operatoren in Ausdrücken [over.match.oper] sagt:
Wenn kein Operand eines Operators in einem Ausdruck einen Typ hat, der eine Klasse oder eine Aufzählung ist, wird angenommen, dass der Operator ein eingebauter Operator ist und gemäß Klausel 5 interpretiert wird.
Das ist genau dein Fall: operator==
's Argumente sind Zeiger, also wird es als eingebaut betrachtet und der Compiler sucht nicht nach möglichen Überladungen.
Absolut nicht.
Zuerst versuchen Sie, einen Zeiger anstelle einer Referenz zu verwenden. Jede Ähnlichkeit zwischen einem Zeiger und einer Referenz ist ein Implementierungsdetail. Denken Sie an das Motto: "Umsetzung ist irrelevant!"
Als nächstes, und direkter zu Ihrer Frage, sind ein std :: string und ein char * ziemlich verschieden, auch wenn sie verwendet werden, um dieselben Dinge darzustellen. Die Umwandlung zwischen ihnen wurde absichtlich erschwert, um zu verhindern, dass sie austauschbar verwendet wurden.
Tags und Links c++