Sind rvalues ​​immer konstant?

8

Wenn int i = 5;

%Vor%

Wird rvalue i in diesem Ausdruck eine Konstante sein, wenn das Ergebnis ausgewertet wird?

Ich stelle diese Frage, weil mein Argument in meinem Kopierkonstruktor ein const

erfordert     
user12321 01.03.2011, 13:00
quelle

2 Antworten

14

Es gibt ein häufiges Missverständnis bezüglich der Lvalue / rvalue-Begriffe. Sie beziehen sich nicht auf Variablen, sondern auf Ausdrücke. Ein Ausdruck kann entweder einen L-Wert oder einen R-Wert ergeben, und zwar entweder const oder non-const.

Insbesondere in Ihrem Code ist der Ausdruck i auf der rechten Seite der Definition int j = i; ein lvalue Ausdruck, kein rvalue. Zum Zweck der Zuweisung gibt es einen lvalue to rvalue-Konvertierung und dann, dass die neu deklarierte Variable zugeordnet ist.

cont-ness ist in den meisten Fällen ein orthogonaler Begriff und bezieht sich darauf, ob Sie das Objekt, mit dem Sie es zu tun haben, mutieren können oder nicht.

%Vor%

Andere Beispiele erfordern die Verwendung von benutzerdefinierten Typen:

%Vor%     
David Rodríguez - dribeas 01.03.2011, 14:14
quelle
3

In C ++ können rvalues ​​des eingebauten Typs nicht const oder non-const sein. Es macht einfach keinen Sinn. Es kann jedoch konstante und nicht konstante Werte von Klassentypen geben.

Ein rvalue ist nur der Wert (nicht das Objekt / die Variable). Was würdest du mit "nicht konstantem Wert" verstehen?!

    
Armen Tsirunyan 01.03.2011 13:06
quelle

Tags und Links