L-Wert (Programmierung)
In der Programmierung wird innerhalb von Anweisungen zwischen L-Wert- und R-Wert-Ausdrücken unterschieden. Ein Ausdruck innerhalb einer Anweisung besitzt einen L-Wert, wenn der Ausdruck auf einen Speicherort verweist. Ausdrücke, die keinen L-Wert besitzen, sind R-Wert-Ausdrücke.
Ein L-Wert zeigt somit auf adressierbaren Speicher. Das L bedeutet, dass ein L-Wert-Ausdruck auf der linken Seite einer Zuweisung stehen kann. R-Wert-Ausdrücke dürfen nur auf der rechten Seite von Zuweisungen vorkommen. L-Wert-Ausdrücke sind häufig Bezeichner von Datentypen (Objekten), können jedoch auch als Funktionsaufrufe oder als Dereferenzierung von Feldern oder Zeigern vorkommen. Alle L-Wert-Ausdrücke haben zugleich R-Werte, aber nicht jeder R-Wert besitzt einen L-Wert.
Beispiele
// C++ Quellcode
#include <iostream>
int x;
int& f(int& val) { return val; } // gibt einen L-Wert zurück
int g(int val) { return val; } // gibt einen R-Wert zurück
int main()
{
x = 3; // x ist ein L-Wert-Ausdruck, 3 ist ein R-Wert-Ausdruck
f(x) = 0; // f(x) ist ein L-Wert-Ausdruck, 0 ist ein R-Wert-Ausdruck
// g(x) = 0 // Funktioniert nicht, da g(x) kein L-Wert-Ausdruck ist!
std::cout << "Der L-Wert von f(x) ist " << &f(x) << std::endl;
std::cout << "Der R-Wert von f(x) ist " << f(x) << std::endl;
// -----------------------------------------------------------------
int field[3] = { 11, 22, 33 };
int * p = field;
field[2] = 1; // Arrayindexierung als L-Wert-Ausdruck
*(p+2) = 0; // Zeigerdereferenzierung als L-Wert-Ausdruck
std::cout << "Der L-Wert von *(p+2) ist " << p+2 << std::endl;
std::cout << "Der L-Wert von field[2] ist " << &(field[2]) << std::endl;
}