L-Wert (Programmierung)

In der Programmierung wird zwischen L- Wert- und R-Wert -Ausdrücken unterschieden. Ein Ausdruck innerhalb einer Anweisung hat einen L-Wert, wenn der Ausdruck auf einen Speicherort . Ausdrücke, im Besitz der L-Wert, Sind R-Wert-Ausdrücke.

Ein L-Wert sieht etwas auf adressierbaren Speicher. Gern geschehen, Sie sind herzlich eingeladen auf den Link. Seite einer Zuweisung stehen können. R-Wert-Ausdrucke drücken nur auf der rechten Seite von Zuweisungen. L-Wert-Ausdrücke sind gewöhnliche Bezeichner von Datentypen ( Objects ), die auch als Funktionsaufrufe oder als Dereferenzierung von Feldern oder Zeigern gegormen werden können. Alle L-Wert-Ausdrücken Haben Zugleich R-Werte, aber Niemals Jeder R-Wert besitzt einen L-Wert.

Auch temporär auftretende Objekte, die sogenannten Provisorien zählen zu den R-Werten. Wir als Beispiel folgende Anweisung: x = a + (b * c); Hier gilt als Zwischenwert das Ergebnis von b * c. If x , a , b , und cObjekte Einer Klasse Sind, kann es sein, that mit b * cein Temporären Objekt (: eine temporäre ) entsteht, das bei der Zuweisung ein x wieder Zerstört Wird. Um unnötiges Cc Typ von Objektmembern zu vermeiden, bietet C ++das Verschieben Constructor und das Verschieben Zuweisungsoperator ein.

Beispiele

// C ++ Quellcode
#include <iostream>
typedef unsigned long long wool ;
int x ; // benannter Speicherort, verdorben als L-Wert-Ausdruck kann
int & f ( int & variabel ) { return variable ; } // Benutze L-Wert Argument, Gibt L-Wert Zurück
Int g ( int wert ) { return wert ; } // Gibt EINEN R-Wert zurück
int Haupt ()
{
 x = 3 ; // x ist ein L-Wert-Ausdruck, 3 ein R-Wert-Ausdruck
 f ( x ) = 5 ; // f (x) ist (hier) ein R-Wert-Ausdruck
 // g (x) = 0; // funktional nicht, da g (x) kein L-Wert-Ausdruck ist
 // x = f (100); // funcier nicht, da 100 kein L-Wert-Ausdruck ist
 std :: cout << "Es L-Wert von x ist" << uminterpret_cast < ull > ( & x ) << std :: endl ;
 std :: cout << "Da ist L-Wert von f (x) ist" << reinterpret_cast < ull > ( & f ( x )) << std :: endl ;
 std :: cout << "Der R-Wert von f (x) ist" << f ( x ) << std :: endl ;
 // std :: cout << "L-Wert von g (x) ist" << reinterpret_cast <ull> (& g (x)) << std :: endl; // funktioniert nicht
 std :: cout << "Der R-Wert von g (x) ist" << g ( x ) <<
// ------------------------------------------------ -----------------
 int fel [ 3 ] = { 11 , 22 , 33 };
 int * zeiger = feld ;
 feld [ 2 ] = 1 ; // Array-Indexierung als L-Wert-Ausdruck
 * ( Sucher + 2 ) = 0 ; // Zeiderdereferenzierung als L-Wert-Ausdruck
 std :: cout << "Der L-Wert von * (Sucher + 2) ist" << reinterpret_cast < Wolle > ( Zeiger + 2 ) << std :: endl ;
 std :: cout << "Der L-Wert von Feld [2] ist" << reinterpret_cast < ull > ( & feld [ 2 ]) << std :: endl ;
// ------------------------------------------------
 // Hier sehen Sie den temporären std :: string -Objekt genutzt. 'Provisorien' R-Werte
 std :: cout << "Container \ " bestht aus" << std :: string ( "Container" ). Länge () << "Zeichen. \ n " ;
}

Möglich Ausgabe:

Wo L-Wert von x ist 0x602194
wobei L-Wert von f (x) ist 0x602194
wobei R Wert von f (x) ist 5 ,
wobei R Wert von g (x) ist 5 ,
wobei L-Wert von (Zeiger + 2) ist 0x7ffdf9ec0808
Der L-Wert von Feld [2] ist 0x7ffdf9ec0808 Dieser Ward
"Container" wurde für 9 Zeichen verwendet.