Die Präfixoperatoren geben das Objekt selbst als lvalue zurück. Die Postfix-Operatoren geben eine Kopie des ursprünglichen Werts des Objekts als Rvalue zurück.Wie wird ein Rval dereferenziert?
so in einer Aussage wie so *a++
a inkrementiert wird, und eine Kopie des ursprünglichen Wertes von a wird als R-Wert, sondern von der Microsoft C++ Sprachreferenz auf Lvalues und Rvalues zurück
rvalue ist ein temporärer Wert, der
nicht über den Ausdruck bestehen, die es verwendet und gibt ein Beispiel
// lvalues_and_rvalues1.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main()
{
int x = 3 + 4;
cout << x << endl;
}
In diesem Beispiel ist x ein Lvalue, da es über den Ausdruck hinaus besteht, der es definiert. Der Ausdruck 3 + 4 ist ein R-Wert, weil er einen temporären Wert darstellt, der nicht über den Ausdruck hinaus existiert, der ihn definiert.
Meine Fragen:
1) Was ist der R-Wert aus den *a++
zurückgegeben werden, so dass es dereferenziert werden?
2) Habe ich irgendein Konzept missverstanden?
Vielen Dank im Voraus!
Ihr erstes Zitat ist falsch, z.B. '+ x' ist ein rvalue. Vielleicht spricht es nur von den Operatoren '++' und '-'. –
@ M.M ich glaube nicht, es ist genau was Primer C++ sagt –
Das zweite Zitat ist auch falsch: * Rvalue * ist eine Ausdruckskategorie, kein Wert. (Etwas verwirrende Benennung). '3 + 4' ist ein R-Wert, aber das dritte Zitat sollte sagen" es bleibt nicht über den Ausdruck hinaus, weil es ein temporärer Wert ist ", und nicht umgekehrt. –