Operatoraufrufsyntax in C ++

8

Ob es eine Situation geben kann, wo die Syntax

ist %Vor%

unterscheidet sich davon?

%Vor%

Ich glaube nicht, aber ich will es nur wissen.

    
FrozenHeart 29.10.2012, 17:55
quelle

5 Antworten

9
%Vor%

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.

    
aschepler 29.10.2012 18:03
quelle
3

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 .

    
juanchopanza 29.10.2012 17:56
quelle
1

Eine Illustration zu einer Situation, in der die beiden Aussagen unterschiedliche Auswirkungen haben, ist, wo Sie implizite Konvertierungen von first haben. Zum Beispiel:

%Vor%

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'

    
Murilo Vasconcelos 29.10.2012 18:05
quelle
0

Der zweite funktioniert nicht mit Primitiven. Beide Formulare funktionieren jedoch mit benutzerdefinierten Typen, bei denen dieser Operator öffentlich überladen wurde.

    
0x499602D2 29.10.2012 17:58
quelle
0

Wenn Ihre Frage nur auf der Syntax basiert, hängt das vom Typ der Parameter ab. Betrachten Sie den folgenden Code:

%Vor%

In dieser Einstellung werden beide Operatoren aufgerufen. Wenn die Parameter des Funktionstyps gleich sind, scheint die Methode bevorzugt zu sein.

    
didierc 29.10.2012 18:08
quelle