Ob es eine Situation geben kann, wo die Syntax
ist %Vor%unterscheidet sich davon?
%Vor%Ich glaube nicht, aber ich will es nur wissen.
entspricht manchmal
%Vor%und manchmal äquivalent zu
%Vor% und manchmal äquivalent zu keinem, wenn die Bedeutung die "eingebaute" Bedeutung von ==
für Nicht-Klassen-Typen ist.
Immer wenn der Compiler ==
sieht, wenn mindestens ein Typ einen benutzerdefinierten Typ enthält, sucht er nach Elementoperatoren (darf nicht im Bereich von a
des Klassentyps verborgen sein) und Nichtmitgliedsoperatoren (mit Argument abhängige Suche) und eingebaute Bedeutungen (da eine Klasse eine implizite Umwandlung in einen gewöhnlichen Typ mit integriertem Vergleich haben könnte). Wenn mehr als eins sinnvoll ist, geht es zu den Regeln für die Überladungsauflösung.
Wenn Sie meinen, "wenn die beiden Syntaxen nicht äquivalent sind", lautet die Antwort, wenn der Gleichheitsoperator kein Mitglied von welchem Typ first
ist. Offensichtlich funktioniert die zweite Variante nicht für Typen ohne ein Mitglied operator==
. Dazu gehören integrierte Typen.
Wenn ein Elementoperator für den Typ first
existiert, unterscheiden sich die beiden, weil der Nichtmitgliedsoperator Typkonvertierungen sowohl für first
als auch für second
zulassen kann, während das Beispiel mit dem Elementoperator nur möglich ist Erlaube eine Konvertierung für second
.
Eine Illustration zu einer Situation, in der die beiden Aussagen unterschiedliche Auswirkungen haben, ist, wo Sie implizite Konvertierungen von first
haben. Zum Beispiel:
In diesem Fall ist der folgende Code ein gültiger C ++ - Code:
%Vor%Wo kompiliert dieser Code:
%Vor%Gibt einen Kompilierungsfehler wie den folgenden:
conversion.cpp: In der Funktion 'int main ()': conversion.cpp: 21: 16: error: Anfrage für das Mitglied 'operator ==' in 'x', das vom Nicht-Klassen-Typ ist 'Int'
Der zweite funktioniert nicht mit Primitiven. Beide Formulare funktionieren jedoch mit benutzerdefinierten Typen, bei denen dieser Operator öffentlich überladen wurde.
Tags und Links c++ operators comparison-operators