Описание тега lvalue

L-значение представляет собой адрес значения. "L" обозначает левую часть, потому что это адрес, который требуется, когда переменная появляется слева от операции присваивания.
1 ответ

Почему значение указателя не может быть хорошей меткой для ссылки на объект в памяти?

Например, int x = 10; Мы знаем этот идентификатор x действует как метка, которая ссылается на объект, который хранит значение 10, Но почему не могу &x также называться меткой, которая ссылается на тот же объект? &x это значение адреса целого…
20 авг '16 в 14:54
1 ответ

Как разрешить преобразование временного в l-значение для C++98 API

У меня есть C++98 API, который принимает значение по неконстантной ссылке и изменяет это значение.В частности, я использую OpenCV и функция cv::rectangle() который занимает cv::Mat & изображение для рисования. Этот же API также использует шаблон…
04 мар '14 в 10:15
3 ответа

C Как определить rvalue и lvalue?

В C есть ли способ определить значения и значения? Некоторые из них легко идентифицировать, например, в присваивании левое значение равно lvalue, а правое значение - rvalue. Но в других сценариях отождествление с таким правилом затруднительно. Напри…
19 июн '12 в 16:27
1 ответ

Конструктор структуры шаблона со ссылочным параметром

У меня есть структура шаблона, как это template<typename ... Args> struct A; template<> struct A<>{ }; template<typename First, typename ... Args> struct A<First, Args...>:private A<Args...>{ typedef A<Args...&…
02 авг '14 в 22:42
7 ответов

Понимание оператора приращения в C

Почему следующее незаконно в C? y = (w + x)++; Согласно моей книге, это незаконно, но я не понимаю, почему.
09 окт '13 в 14:36
1 ответ

Копирование указателей для двух динамически растущих массивов в C

ОБНОВЛЕНИЕ: я думаю, что я ответил на свой собственный вопрос, за исключением некоторых возможных проблем с утечками памяти. ОРИГИНАЛЬНЫЙ ВОПРОС ЗДЕСЬ, ОТВЕТЬ НИЖЕ. Предыстория: я занимаюсь некоторыми числовыми вычислениями, но я почти никогда не ис…
11 мар '14 в 18:01
4 ответа

Можете ли вы присвоить имя переменной объекту, на который указывает указатель, после того, как указатель был выделен?

Скажем, у меня есть код, где у меня есть переменная а, и я выделяю указатель, чтобы указать a: int a = 5; int* ptr = &a; Тем не менее, после этого, я хочу дать в памяти эту переменную a занимает имя b, int b = a; // doesn't work, because it only…
14 дек '16 в 05:14
8 ответов

Приведение указателя не дает lvalue. Зачем?

После публикации одного из моих самых противоречивых ответов здесь я осмелюсь задать несколько вопросов и в конечном итоге заполнить некоторые пробелы в моих знаниях. Почему не выражение вида ((type_t *) x) считается действительным lvalue, предполаг…
16 сен '11 в 14:50
2 ответа

Правда ли, что переменные, адрес которых может быть взят, являются lvalues?

Недавно, читая блог Скотта Мейерса об универсальной ссылке, я пришел с утверждением, что "если вы можете взять адрес выражения, выражение будет lvalue". но действительно ли это правда Предположим, у меня есть следующий код class Test { }; int main()…
18 май '16 в 09:00
1 ответ

Почему это значение не повышается до значения l, как указано в ссылке?

Справочник по ржавчине говорит: Левый операнд выражения присваивания или составного присваивания является lvalue-контекстом, как и единственный операнд унарного заимствования. [...] Когда rvalue используется в контексте lvalue, вместо него создаетс…
07 янв '17 в 10:55
0 ответов

Ожидаемое значение l: вызов пользовательского итератора из класса хоста

Я сделал эту тестовую программу, чтобы повторить ошибку из моего фактического кода. Итератор работает правильно при вызове в основной функции, когда stuff() закомментировано. stuff() заставляет компилятор выдавать ошибку. Я предполагаю, что причина …
01 май '16 в 22:45
1 ответ

MSVC++ 2013 позволяет присваивать временные объекты, эффективно обрабатывая их как lvalues

Я сталкивался с этой "особенностью" в MSVC++, и теперь я не уверен, является ли это ошибкой или мое понимание lvalues ​​/rvalues ​​в C++ просто неверно. Для иллюстрации я добавил немного заглушенного кода, но в основном проблема в том, что MSVC++ 20…
4 ответа

Почему я не могу взять адрес возвращаемого значения?

Я разделил некоторый код на два файла, он работал раньше. В одном файле у меня есть функция, которая имеет параметр выходного значения, который является указателем на указатель. Я заполняю этот параметр вызовом геттера и разыменую его: foo(&bar(…
23 сен '11 в 10:24
2 ответа

Возвращаемое значение функции, не распознанной как lvalue

Вот пример: void foo(int*& x) {} struct boo { int* z; int* getZ() { return z; } }; int main() { int* y; foo(y); // Fine boo myBoo; foo(myBoo.getZ()); // Won't compile return 0; } Я могу исправить это, используя boo::getZ(), возвращающую ссылку н…
10 июл '14 в 21:44
0 ответов

Clang++ 2D указатель массива странные ошибки

Следующий код прекрасно компилируется с g++, но не работает с clang++ в режиме C++11. Я отметил ошибки в строке. Кто-нибудь может точно объяснить, в чем проблема? #include <iostream> using namespace std; int main(){ int nx=1000; int ny=1000; d…
06 мар '15 в 20:12
1 ответ

Выражение должно быть изменяемым L-значением

У меня есть здесь char text[60]; Тогда я делаю в if: if(number == 2) text = "awesome"; else text = "you fail"; и всегда говорилось, что выражение должно быть изменяемым L-значением.
15 май '11 в 13:41
2 ответа

lvalue требуется как левый операнд присваивания -error в?: в C

Почему a<=20? b=10 : c=30; дать ошибку lvalue? error: lvalue required as left operand of assignment потому что b=10 и c=30 - операторы, а не выражения?
24 июл '16 в 16:04
1 ответ

Типы выделения памяти по моменту привязки lvalue в Python

У меня возникли проблемы с домашним заданием. Я провел много исследований, но застрял. Назначение выглядит следующим образом: Разработайте и внедрите пример, в котором вы показываете различные типы переменных, которые реализует назначенный язык, в с…
19 апр '15 в 17:26
1 ответ

Являются ли массивы lvalues ​​в JavaScript, совместимом с ECMAScript?

Firefox 3.5.3 (по крайней мере) позволяет мне писать код вроде: var array = [4, 5, 6]; var foo, bar, baz; [foo, bar, baz] = array; в какой момент foo => 4 bar => 5 baz => 6 что может быть весьма полезно для ясности кода. Это считается ECMAS…
31 окт '09 в 15:51
3 ответа

Ошибка C2106: '=': левый операнд должен быть l-значением в последовательности Фибоначчи при динамическом программировании на C++

Я пытаюсь написать программу для генерации последовательности Фибоначчи методом динамического программирования следующим образом. #include<iostream> #include<ctime> int fib(int index) { int memo[] = {0}; memo[0] = 0; memo[1] = 1; for(int…
29 янв '14 в 09:10