MyTetra Share
Делитесь знаниями!
Значения Lvalue и Rvalue
Время создания: 19.11.2017 19:57
Раздел: Компьютер - Программирование - Язык C++ (Си++)
Запись: xintrea/mytetra_syncro/master/base/1511110625nfglwpoiug/text.html на raw.github.com

Объяснение из MSDN

Каждое выражение C++ является значением lvalue либо значением rvalue. Под значением lvalue понимается объект, существующий за пределами одного выражения. Значение lvalue можно представить как объект с именем. Все переменные, включая неизменяемые переменные (const), являются значениями lvalue. Rvalue — это временное значение, которое не сохраняется за пределами выражения, в котором оно используется. Чтобы лучше понять разницу между значениями lvalue и rvalue, рассмотрим следующий пример.

// lvalues_and_rvalues1.cpp

// compile with: /EHsc

#include <iostream>

using namespace std;

int main()

{

int x = 3 + 4;

cout << x << endl;

}

В этом примере x — это значение lvalue, поскольку оно продолжает существовать за пределами выражения, в котором оно определено. Выражение 3 + 4 — это значение rvalue, поскольку оно возвращает временное значение, которое не сохраняется за пределами выражения, в котором оно определено.

В следующем примере показано несколько правильных и неправильных способов использования значений lvalue и rvalues.

// lvalues_and_rvalues2.cpp

int main()

{

int i, j, *p;

// Correct usage: the variable i is an lvalue.

i = 7;

// Incorrect usage: The left operand must be an lvalue (C2106).

7 = i; // C2106

j * 4 = 7; // C2106

// Correct usage: the dereferenced pointer is an lvalue.

*p = i;

const int ci = 7;

// Incorrect usage: the variable is a non-modifiable lvalue (C3892).

ci = 9; // C3892

// Correct usage: the conditional operator returns an lvalue.

((i < 3) ? i : j) = 7;

}


Примечание

В примерах этого раздела показано правильное и неправильное использование при неперегруженных операторах. Перегрузив операторы, можно преобразовать выражение, такое как j * 4, в значение lvalue.

Термины lvalue и rvalue часто используются в связи с ссылками на объекты. Дополнительные сведения о ссылках см. в разделах Декларатор ссылки Lvalue: & и Декларатор ссылки Rvalue: &&.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования