Es ist eine Verschleierung. Der Komma-Operator wertet alle Argumente von links nach rechts aus, verwirft aber alle Argumente bis auf das letzte Argument. Der formale Typ des gesamten Ausdrucks ist der Typ des letzten Arguments.
(Beachten Sie auch, dass das Komma selbst ein Sequenzpunkt ist.)
string2 wird der Wert in der Map unter key string1.
Der Ausdruck "s", string2
verwendet das eingebaute 1 Komma Betreiber . Es hat die folgende Semantik:
In einem Komma-Ausdruck
E1, E2
wird der Ausdruck E1 ausgewertet, sein Ergebnis verworfen und seine Nebenwirkungen werden beendet, bevor die Auswertung des Ausdrucks E2 beginnt (beachten Sie, dass ein benutzerdefinierter Operator die Sequenzierung nicht garantieren kann) (< em> bis C ++ 17 ).Der Typ, der Wert und der Werttyp des Ergebnisses des Kommaausdrucks entsprechen genau dem Typ, dem Wert und dem Werttyp des zweiten Operanden, E2.
Im Falle Ihres Code-Snippets ist es überhaupt nicht nützlich, und sein einziger Zweck ist es, Leser zu verwirren. Da die Auswertung von "s"
keine Nebenwirkungen hat, ist der Code identisch mit diesem:
1 Dies setzt voraus, dass kein benutzerdefiniertes
operator,
definiert wurde, das den Argumenten entspricht. Wenn ja, kann es alles tun, und der Rest dieser Antwort gilt nicht. Sie müssen in den Quellcode schauen, um herauszufinden, was der Ausdruck ergibt.
Dies ist wahrscheinlich der Komma-Operator, der alles auswertet und dann alles außer dem Wert auf der rechten Seite verwirft.
Aber, wenn operator,( char const*, string2 )
überladen ist, könnte es alles tun (wobei string2
der Typ von string2
ist).
Suchen Sie nach solchen Überladungen.
Beachten Sie, dass, wenn string2
ein std::string
ist, solche Überladungen Ihr Programm schlecht aussehen lassen, kein Diagostic erforderlich. Wird die Leute nicht davon abhalten, es zu tun. Und es kann "funktionieren" und trotzdem erlauben ,
(zum Beispiel) eine Verkettung von Strings zu verursachen.
Komma ist ein Operator, der Argumente von links nach rechts auswertet und den Wert des Elements mit der höchsten Priorität hat.
Zum Beispiel:
%Vor% Von links wird also a+=b
zuerst ausgewertet, was a
auf 2+3
setzt, dann wird a*b
ausgewertet und der Ausdruck hat den Wert 5*3
, welcher Wert verwendet wird. Also c
ist 15
Tags und Links c++ dictionary