Sollte char * nicht implizit in std :: string umgewandelt werden?

8

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.

    
my_question 03.09.2014, 15:39
quelle

2 Antworten

17

§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.

    
Anton Savin 03.09.2014, 15:49
quelle
0

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.

    
James Curran 03.09.2014 15:52
quelle

Tags und Links