Warum funktioniert die Arbeit vor dem Inkrementieren, aber das Post-Inkrement nicht auf einer Referenzvariablen?
%Vor% Warum ist swap(++a, ++b)
erlaubt, aber swap(a++, b++)
sagt:
[Fehler] ungültige Initialisierung von nichtkonstanten Referenz vom Typ 'int & amp;' aus einem rvalue vom Typ 'int'
Wenn Sie
anrufen %Vor% a++
und b++
geben Ihnen ein temporäres Objekt, da nach dem Inkrementieren die vorherigen Werte zurückgegeben werden. Da swap()
seine Parameter als Referenz verwendet, können sie nicht an diese temporären Werte gebunden werden. Verwenden Sie ++a
und ++b
arbeiten, wenn wir zuerst a
und b
erhöhen und dann an swap übergeben, so dass es keine temporäre gibt.
++ a gibt einen l-Wert zurück, aber a ++ gibt einen r-Wert zurück. Sie müssen einen l-Wert an die Funktion swap () übergeben.
Relevanter Beitrag zu l-value und r-value: Postfix (Präfix) Inkrement, L-Wert und R-Wert (in C und C ++)
Die Funktion std::swap
muss den Wert von zwei Variablen austauschen, auch bekannt als Lvalue-Referenz. Der Ausdruck x++
ist keine Variable, sondern ein Wert oder ein rvalue. Ein rvalue kann nicht an eine lvalue-Referenz gebunden werden.
Der Unterschied zwischen einem rvalue und einem lvalue könnte so erklärt werden:
%Vor%Aber Folgendes ist nicht gültig:
%Vor% Was Sie an std::swap
senden, sind zwei Zahlenwerte.
Tags und Links c++