Вопросы с тегами [lvalue]

1

голосов
2

ответ
77

Просмотры

Почему не работает называть именующее выражение

Это должно быть довольно очевидно, но я не мог любой нормативно-справочный в стандарте явно, что вызов функции (не) именующий. Существует несколько связанного вопрос, но речь идет о C ++ и никаких ссылок не предусмотрена. Просматривая 6.5.2.2 (p5) Функция вызывает только я мог бы найти, если выражение, которое обозначает вызываемой функции имеет тип указатель на функцию, возвращающую тип объекта, выражение вызова функции имеет тот же тип, что и тип объекта, и имеет значение определяется, как указано в 6.8.6.4 6.3.2.1 (p1) утверждает, что именующее выражение является выражением (с типом объекта другой thanvoid), что potentiallydesignates объект так что я пытался найти, если вызов функции обозначает объект. Не указано в стандарте, если результат вызова функции имеет срок хранения и срок службы. Так как любой объект имеет срок хранения и срок службу я пришел к выводу, что любое выражение вызова функции не обозначает объект, следовательно, не в именующем выражение. Но это кажется запутанным и сложным. В частности, я нашел пример 6.5.2.3 (Р7): Пример 1 Если F представляет собой функцию, возвращающую структуру или объединение, и х является членом этой структуры или объединения, F () х является допустимым выражением постфикса, но это не так. именующий. Судя по этому примеру, если F () будет именующим п (). Х будет также именующей. Но примеры являются информативными, которые заставили меня запутался. F (). х является допустимым выражением постфикса, но не именующий. Судя по этому примеру, если F () будет именующим п (). Х будет также именующей. Но примеры являются информативными, которые заставили меня запутался. F (). х является допустимым выражением постфикса, но не именующий. Судя по этому примеру, если F () будет именующим п (). Х будет также именующей. Но примеры являются информативными, которые заставили меня запутался.
Some Name
1

голосов
2

ответ
402

Просмотры

Использование функции, возвращающей apointer в Lvalue

Почему косяк я использовал функцию, возвращающую указатель как Lvalue? Например, это один работает INT * функция () {Int * х; вернуться х; } Int основной () {Int * х = функция (); х = новый INT (9); } Но не это INT * функция () {INT * х; вернуться х; } INT основных () {INT * х; Функция () = х; } В то время как я могу использовать переменную указатель как Lvalue, почему я не могу использовать функцию, возвращающую указатель как Lvalue? Кроме того, когда функция возвращает Refernce, вместо указателя, то он становится действительным именующим.
infinity
2

голосов
2

ответ
34

Просмотры

Почему назначение указателя показывает Lvalue ошибку, когда задания выглядят наши правила?

Я дал кусок кода, для которого мы должны угадать вывод. Мой выход: 60 #include INT основных () {INT d [] = {20,30,40,50,60}; INT * и, К; и = д; к = * ((++ и) ++); к + = к; (++ и) + = к; Е ( "% d", * (++ и)); возвращать 0; } Ожидаемое: к = * ((++ и) ++) будет равна 30, как это будет перебирать один раз (++ и), а затем будет повторяться, но не назначен. Таким образом, мы находимся в г [1]. (++ и) + = к здесь и будет перебирать на следующую позицию, добавьте к к нему, а затем присвоить результат в дальнейшем следующий элемент и. Фактический результат: main.c: В функции 'главной': main.c: 16: 16: ошибка: именующий требуется в качестве операнда приращения к = * ((++ и) ++); ^ Main.c: 18: 11: ошибка: именующий требуется в качестве левого операнда назначения (++ и) + = к; И это смущало меня дальше в концепции указателей. Пожалуйста помоги.
pankaj
1

голосов
1

ответ
123

Просмотры

When can you use a character array's name to make a valid L-value?

Учитывая указатель и массив, установка один равен другому не может в одном случае, и работает в другом. символ * c_ptr = «Я указатель символ»; символ c_arry [] = «Я массив символов»; c_ptr = c_arry; // Эта строка работает. c_arry = c_ptr; // Эта строка не удается. Когда линия выше не удается, он создает это предупреждение: «ошибка: несовместимые типы при назначении типа». Эта ошибка кажется неискренним, и, честно говоря, немного распутная, учитывая, что только линия до, она утверждала, что она была моим типом. Пытаясь понять этот вопрос, я перечитал главу Д.К. & R в на указатели и массивы и заметили на странице 102 их утверждение, что «имя массива является адрес нулевого элемента». Если K & R является точным, подставив в & c_arry [0] должен генерировать ту же ошибку, верно? Но эта линия: & c_arry [0] = c_ptr; дает мне новую ошибку: «Lvalue требуется в качестве левого операнда назначения». Почему это так называемое идентичное значение генерировать различные ошибки? Когда GCC и K & R противоречат друг с другом, что, когда я обращаюсь к специалистам по StackOverflow. Чтение немного о л стоимостей, я пришел к выводу, что это является L-значение по сравнению с вопросом R-значение, и что c_arry может быть только L-значение - то есть, присвоенное значение - в двух и только две ситуации: Строка инициализации (т.е. символ c_arry [] = «Я массив символов»;) и назначение символов (т.е. c_arry [0] = «A» =;) Это мой вывод точен? Являются ли эти только два способа, которые когда-либо c_arry могут быть назначены? Или, другими словами, есть когда-либо Х, для любого из следующих строк кода, который когда-либо действительным? c_arry = Х; & C_arry = Х; & C_arry [0] = X; * C_arry = Х; * c_arry [0] = X;
schulwitz
1

голосов
1

ответ
71

Просмотры

Ожидаемое Выражение до уравнения в C

Я делаю небольшую программу на С, которая работает вне области и окружность кругов, и я хочу, чтобы это уравнение будет разработано, но каждый раз, когда он говорит: «именующий требуется в качестве левого операнда назначения» на верхнюю строку, и «ожидаются выражение до «=» знак»во второй строке, которую я пробовал все, что я могу думать, но ничего, кажется, работает. Я читал другие статьи о таких вещах, но я не мог работать его. (С плавающей точкой) circ_area = (CircleRadi * CircleRadi) * 3,1415926538; (С плавающей точкой) circ_circum; = (CircleRadi * 2) * 3,1415926538; Это как раз в середине кода, а не в каких-либо петель или что-нибудь. Я могу отправить весь код, если вы хотите.
1

голосов
1

ответ
390

Просмотры

C++ Function taking lvalue and rvalue parameters transparently

Я ищу способ сделать объявление функций, которые могут принимать либо lvalues ​​или rvalues ​​в качестве параметров без особых хлопот. Этот вопрос, функция, которая принимает как Левые и правые аргументы, обеспечивает временное решение, которое работает, но должно быть реализованы «вручную». Например, функция: недействительный тест (Т & или Т &&); может быть реализована в виде: пустоты теста (Т &) {код ...}; Испытание недействительным (Т && т) {тест (т); }; Проблема с этим состоит в том, что в число параметров растет, количество деклараций, которые вы должны ввести «вручную» также увеличивается, к сожалению, в геометрической прогрессии (2 ^ n_parameters). Таким образом, для функции, как: недействительным комплекс (A & A или &&, B & B или &&, C & C или &&, D & D или &&, Е и Е или &&); Вы должны ввести 32 различных подписей и что» в чем проблема. Идея заключается в том, что один должен быть в состоянии вызвать эту функцию с любой комбинацией параметров именующее / RValue, как: строка s ( «НЕЧТО»); комплекс (строка ( "НЕЧТО"), s, "НЕЧТО", ...); // ДОЛЖЕН РАБОТАТЬ Но объявляя комплекс только один раз и с каким-то автоматизированным процессом, который генерирует все остальное, что нужно. Может ли это быть решено с переменными числом шаблонов и каким-то выделки эмуляции? Макросы могут быть? Или что вы думаете? Может ли это быть решено с переменными числом шаблонов и каким-то выделки эмуляции? Макросы могут быть? Или что вы думаете? Может ли это быть решено с переменными числом шаблонов и каким-то выделки эмуляции? Макросы могут быть? Или что вы думаете?
almosnow
1

голосов
2

ответ
5.5k

Просмотры

«Выражение должно быть изменяемым Lvalue»

Я пытаюсь создать моделирования физики, которая моделирует физику на всех spaghettiObjects и отображает их как текст. Есть в настоящее время не любая симуляция физики, но те идут бы где // математик написано у меня возникли проблемы с этим кодом. Я довольно новый программист, и я начал в Java, и я пытаюсь научиться C ++. Ошибки на линии 48,49,50, где я пытаюсь сделать то же самое с различными вызовами методов. Я не могу понять, что здесь не так, когда я извлекаю = worldObjectToUpdate.variable он больше не выдает сообщение об ошибке. Вот весь код #include #include с помощью патезраса; // Создан для удержания х, у, скорости и массы объекта. // Это называется spaghettiObject причиной мне было скучно. // Лучше имя, вероятно, будет что-то вроде «worldObject» STRUCT spaghettiObject {общественности: плавать скорость; плавать Позиция X; плывут Позиция Y; плавать массы; }; // Все объекты мира в массиве spaghettiObject туАггау [5]; // зона тестирования тест spaghettiObject; spaghettiObject createTestObject () {туАггау [1] = тест; test.mass = 2; test.positionX = 2; test.positionY = 2; test.velocity = 2; вернуться тест; } // Выход из симуляции физики к выходу визуализации функции spaghettiObject; // Вычисляет положение х с использованием скорости плавать spaghettiObject в nextPositionX (spaghettiObject objectToTransform) {плавать objectToTransformNewX = objectToTransform.positionX; // математика возвращение objectToTransformNewX; } // Вычисление позиции х с использованием скорости плавать spaghettiObject в nextPositionY (spaghettiObject objectToTransform) {плавать objectToTransformNewY = objectToTransform.positionY; // математика возвращение objectToTransformNewY; } // Вычисляет новую скорость. для использования: после обновления х и у объекта флоат nextVelocity (spaghettiObject objectToUpdate) {плавать objectToUpdateNewV = objectToUpdate.velocity; // математика возвращение objectToUpdateNewV; } // Разработанный, чтобы быть там, где все функции обновления называется недействительным updateWorldObject (spaghettiObject worldObjectToUpdate) {nextPositionX (worldObjectToUpdate) = worldObjectToUpdate.positionX; nextPositionY (worldObjectToUpdate) = worldObjectToUpdate.positionY; nextVelocity (worldObjectToUpdate) = worldObjectToUpdate.velocity; } // вычисляет позицию переменного, определенную выше, туАггау недействительного nextUpdateOfMyArray () {// темп объект, который фактически весь массив spaghettiObject температура; // initilization из Темп temp.mass = 0; temp.positionX = 0; температура = 0 Позиция Y; temp.velocity = 0; // для вызова функции для // каждого из объектов (INT I = 0; я ++; г <(SizeOf туАггау / SizeOf spaghettiObject)) {// назначая текущий объект в массиве к температурам объекта туАггау [I] = темп; // Вызов функции обновления updateWorldObject (температура); // Тест createTestObject () = темп; // регулярный выходной код = темп; }} // Используется для обновления обновления физики недействительными () {nextUpdateOfMyArray (); } // Используется для отображения выходной консоли аннулируются визуализации () {соиЬ (SizeOf туАггау / SizeOf spaghettiObject)) {// назначая текущий объект в массиве к температурам объекта туАггау [I] = темп; // Вызов функции обновления updateWorldObject (температура); // Тест createTestObject () = темп; // регулярный выходной код = темп; }} // Используется для обновления обновления физики недействительными () {nextUpdateOfMyArray (); } // Используется для отображения выходной консоли аннулируются визуализации () {соиЬ (SizeOf туАггау / SizeOf spaghettiObject)) {// назначая текущий объект в массиве к температурам объекта туАггау [I] = темп; // Вызов функции обновления updateWorldObject (температура); // Тест createTestObject () = темп; // регулярный выходной код = темп; }} // Используется для обновления обновления физики недействительными () {nextUpdateOfMyArray (); } // Используется для отображения выходной консоли аннулируются визуализации () {соиЬ
user2680646
1

голосов
1

ответ
0

Просмотры

Is there a way to have read-and-write views in Range-v3?

В Range-v3 можно легко создать вид существующих контейнеров. Например, # include # include Int основной () {станд :: вектор V = {1,2,3}; автоматический диапазон = v | Диапазоны :: v3 :: Вид :: преобразования ([] (автоматический х) {вернуться х * 2;}); утверждают (диапазон [1] == 4); // диапазон [1] = 4; // ошибка не может написать L-значение} Эти представления, естественно, только для чтения. Интересно, есть ли способ, чтобы создать читать и писать представление в пределах диапазона-v3? Я понимаю, что такие вещи гораздо сложнее, чем только для чтения, и не всегда возможно, но все-таки интересно, если есть протокол в Range-v3 использовать это непосредственно или реализовать его. Например, я видел примеры производных классов от диапазонов :: view_facade, реализующих функции члена чтения () (я не могу найти пример снова, документация диапазонов v3 действительно разбросана по всему). Как насчет записи (... ) Функция-член? Я ищу какое-то гипотетическое двунаправленное преобразование кода, как это: #include #include Int основных () {станд :: вектор V = {1,2,3}; автоматический диапазон = v | Диапазоны :: v3 :: Вид :: bitransform ([] (двойной х) {возвращение х * 2;}, [] (двойной х) {вернуться х / 2;}); // прямая и обратная функция для чтения и записи утверждают (диапазон [1] == 4); Диапазон [1] = 8; // ошибка не может записать на L-значение (диапазон утверждают [1] == 8); утверждать, (v [1] == 4); } утверждать, (v [1] == 4); } утверждать, (v [1] == 4); }
alfC
1

голосов
2

ответ
239

Просмотры

Invalid Lvalue, указатель на функцию также, Что использование этого? Его гораздо проще вызвать функцию

Поэтому я практикуя указатели на функцию, и опробовал делаю эту простую программу, вот отрывок из него. Он по-прежнему дает мне ошибку «недопустимое именующее выражение», когда речь идет о присвоении адреса. funcptr = & addnum, например. Кроме того, я не могу не задаться вопросом, что толк от этого? Разве это гораздо проще вызвать функцию? Или я что-то недоразумение #include INT arithnum (целое основание); INT addnum (интермедиат баз, внутр новый); INT subnum (интермедиат баз, внутр новый); INT mulnum (интермедиат баз, внутр новый); INT divnum (интермедиат база, внутр новый); ЬурейиЙ Int * ptrdef (Int, Int); INT arithnum (целое основание) {оператор символ; ИНТ операнд; ptrdef funcptr; Е ( "Введите оператор:"); зсапЕ ( "\ п% с", и оператор); Е ( «Введите второй операнд:»); зсапЕ ( "% d", & операнд); переключатель (оператор) {случай '+': funcptr = & addnum; перерыв; Случай '-': funcptr = & subnum; перерыв; случай '*': funcptr = & mulnum; перерыв; Случай '/': funcptr = & divnum; перерыв; } Вернуть funcptr (основание, операнд); }
Binary Bartender
1

голосов
2

ответ
198

Просмотры

Является ли * р именующего или Rvalue

В следующем коде, это * а Rvalue или именующее? #include силы основных () {INT Ь = 2; INT * а = NULL; а = & Ь; * А = 3; Е ( "% d", * а); }
henryyao
1

голосов
1

ответ
97

Просмотры

D отключение из-структуры будучи именующим

Есть ли способ отключить от-структуры используются в качестве Lvalue (не может быть использована в качестве переменного)? Я пытался инвалидизирующих конструкторы и opAssign, но в конце концов, вы можете назначить его из функций. UnitTest {// MyStruct doesntCompile; MyStruct shouldntCompile = makeMyStruct (); } {Структура MyStruct @disable это (); @disable это (это); @disable недействительный opAssign (ссылка MyStruct); @disable недействительный opAssign (MyStruct); это (INT dummyArgument) {}} MyStruct makeMyStruct () {возвращение MyStruct (0); }
1

голосов
1

ответ
101

Просмотры

Приращение указатель в качестве аргумента функции

У меня есть следующий код: Int х; INT * xPtr = & х; INT * Get_xPtr (недействительными); аннулируются SomeFunction (интермедиат * у); INT * Get_xPtr (недействительными) {вернуться xPtr; } Аннулируются SomeFunction (интермедиат * у) {...} ... пустота главный (пустота) {SomeFunction (++ Get_xPtr ()); } Этот код компилирует штрафа без приращения на возвращаемое значение (адрес) функции Get_xPtr (), но с приращением я получаю сообщение об ошибке: «Ошибка: именующее требуется в качестве приращения операнда» Я предполагаю, что это не имеет синтаксис, но почему ? Есть ли другой способ сделать это, или мне нужно: междунар * tempPtr = GetxPtr (); tempPtr ++; SomeFunction (tempPtr);
iQt
1

голосов
1

ответ
100

Просмотры

Шаблон структуры конструктора с опорным параметром

Я структуру шаблона, как этот шаблон структуры A; Шаблон структура А {}; Шаблон структура A: частный A {ЬурейиЙ ребенок; А само определение типа во; определение типа во первого типа; статического Const size_t размера = 1 + SizeOf ... (Args); значение типа; Шаблон A (Первый && первый, _Args && ... арг): ребенок (вперед (арг) ...), значение (шаг (первый)) {} // перемещает шаблон (константный First & первый, _Args && .. . арг): ребенок (вперед (арг) ...), значение (первый) {} // присваивает}; Если я называю эту структуру, как показано ниже; INT F = 6; А Г (е, 5, е); // он работает A I (F); // не работает Ошибка компиляции второй не работает причина Rvalue конструктор не может назначить первое значение. Что я должен сделать для второй работы?
DRoW
1

голосов
2

ответ
131

Просмотры

Ячейка памяти строковых и ИНТ объектов или lvalues ​​/ rvalues

Я компиляция следующего кода на Mac OS X, с помощью GCC: с помощью патезраса; ИНТ х; INT & getRef () {вернуться х; } Строка GetName () {возвращение "Алекс"; } INT основных () {Int А; а = 7; getRef () = 4; соиЬ
syntagma
1

голосов
1

ответ
156

Просмотры

Указатель рассматривается как неизменяемый Lvalue в Visual Studio 2013

getNode (): Node getNode (целое положение) {Node * пункт = голова; для (INT I = 0; я <положение; ++ я) {пункт = item-> следующая; } вернуть изделие; }; Узел Перекачка Код: Узел температура; temp.element = list.getNode (л) .element; temp.next = list.getNode (л) .next; list.getNode (л) .element = list.getNode (ч) .element; list.getNode (л) .next = list.getNode (ч) .next; list.getNode (ч) .element = temp.element; list.getNode (ч) .next = temp.next; Я работаю над проектом для моего компьютерного класса науки и это связано в течение нескольких дней. Я хочу, чтобы отсортировать связанный список с помощью быстрой сортировки, который является довольно простым, но я боролся со странным вопросом в то время как замена узлов в списке. Для справки, функция getNode () возвращает узел в определенный индекс в списке и узлы держать указатель на объект гитары вместе с указателем на следующий узел. Я экспериментировал в течение нескольких часов, и теперь я понял, что линия, такие как это, «list.getNode (ч) .element = temp.element;» говорит, что указатель на объект гитары в узле в списке в настоящее время присваивается значение указателя в объекте темп. Это, как правило, работает, но я получаю сообщение об ошибке в этот момент о том, что левая сторона не изменяемая именующая. Однако я мог бы сделать указатель и поставить его на левой стороне оператора присваивания без каких-либо ошибок. Кроме того, левая сторона не имеет ошибок, когда я использую разыменование оператора (*) впереди, но это не успешно поменять узлы. Должно быть, я что-то отсутствует.
Keith Larson
-2

голосов
1

ответ
33

Просмотры

Почему компилятор C ++ не предупреждают о возвращении ссылки на локальную переменную?

В коде ниже, компилятор предупреждает о возвращении ссылки на локальный метод, когда бар () называется. Я ожидал, что подобное предупреждение о методе Foo (), а также. # include класс Значение {общественности: INT & Foo () {INT дц = 10; INT & r_tc = дц; вернуться r_tc; } INT & бар () {INT дц = 10; вернуть ТС; }}; Int основной () {значение Value; INT & foo_ref = value.foo (); INT & bar_ref = value.bar (); станд :: соиЬ
UnSat
1

голосов
1

ответ
1.4k

Просмотры

недействительный инициализация неконстантного ссылки типа из RValue типа

Я пишу код, основанный на вопрос 28 смарт-указатель более эффективной C ++ следующим образом. Тем не менее, он не может составить: main.cpp: В конкретизации «:: оператора умного указателя умного указатель () [с U = MusicProduct; Т = Кассетный] ': main.cpp: 99: 17: требуется от здесь main.cpp: 48: 39: ошибки: недействительный инициализация неконстантного ссылки типа „& умного указателя“ от RValue типа „возвращения“ умного указателем умного указателя ( ptr_); ^ Main.cpp: 16: 9: Примечание: аргумент инициализация 1 из «:: умный указатель (умного указателя умного указателя &) [с Т = MusicProduct]» умного указателя (умный указатель и другой) ^ либо из этих двух изменений работы: в реализации оператора умного указателя ( ), создать объект и вернуть: умный указатель на (ptr_); возвращать; Или же, сделать параметр конструктора копии константного умного указатель (сопзИте & другой умный указатель) и комментарий линии other.ptr_ = nullptr; Есть ли причина, почему одно из решений работает? Благодарю. #include класс шаблон {умный указатель общественности: умный указатель (T * PTR): ptr_ (PTR) {} ~ умный указатель () {если (ptr_) {удалить ptr_; }} Умный указатель (умный указатель и другое) {ptr_ = other.ptr_; other.ptr_ = nullptr; } & Оператор умный указатель = (& другой умный указатель) {если (это == & другое) {вернуться * это; } Если (ptr_) {удалить ptr_; } Ptr_ = other.ptr_; other.ptr_ = nullptr; вернуться * это; } Шаблон оператор умный указатель () {// это работает // умный указатель а (ptr_); // возвращать; // ошибка возврата (ptr_ умный указатель); } T & оператор * () сопзЬ {возвращение * ptr_; } Оператор Т * -> () сопзЬ {возвращение ptr_; } Частная: Т * ptr_ = nullptr; }; класс MusicProduct {общественности: MusicProduct (Const станд :: строка и имя): name_ (имя) {} виртуальный ~ MusicProduct () {} виртуальная пустота Play () Const = 0; виртуальная пустота ShowName () сопзЬ {станд :: соиЬ
kwunlyou
1

голосов
2

ответ
89

Просмотры

Что происходит с ссылочной переменной, когда его ссылка «умирает»?

Скажем, я создать класс с именем MyClass, который содержит ссылки переменной m_my_resource. Эта переменная находится по существу только с именем псевдоним, связанный с какой-либо другой ячейке памяти. MyClass класс MyClass {общественности: MyClass (Const MyResource & My_Resource): m_my_resource (My_Resource) {} частное: Const MyResource & m_my_resource; } Теперь давайте говорить, что я пытаюсь сделать следующее: основным {MyClass my_class (Utils :: getMyResource ()); // продолжать делать вещи} Что именно происходит в этом случае? Я определил MyClass только иметь один конструктор, который принимает в опорной (именующей ссылке) на MyResource. Однако, в пределах моей основной функции, я построить экземпляр MyClass с временным объектом (RValue). Почему мой код может компилировать? Безразлично» т my_class теперь содержит справочную переменный, связанный с некоторой временной ячейкой памяти? По существу переменная, в которой ссылочная переменная была связана с теперь «умер», что происходит с ссылочной переменной? Кроме того, это тот случай, когда я хочу, чтобы мой класс, чтобы иметь конструктор, который принимает ссылки RValue?
Izzo
1

голосов
1

ответ
436

Просмотры

Which C++ vector push_back is called for objects created inside a loop

Это очень простой вопрос, но я не могу получить мою голову вокруг логики того, что здесь происходит. Рассмотрим фрагмент кода: класс Board {частное: вектор <вектор> allCells; INT bheight; INT bwidth; общественности: плата (интермедиат ширина = 10, Int высота = 10) {bheight = высота; bwidth = ширина; allCells.resize (ширина); #loop для создания объектов для ячеек (INT I = 0; г <ширину; я ++) {allCells [I] .reserve (высота); для (Int J = 0; J <высота; j ++) {сотовый aCell (I, J, 0); #an объект, созданный внутри цикла allCells [I] .push_back (aCell); #push его в вектор}}} Этот код работает отлично т.е. после выхода из конструктора, все объекты в векторе (векторов) allCells еще хранит соответствующую информацию. Мой вопрос заключается в том, как было это достигнуто? По определению, vector.push_back имеет только два варианта: пустое push_back (Const value_type & VAL); недействительный push_back (value_type && вал); Это не может вызвать второй вариант, так как временный объект aCell является объектом-значения. Если это вызывает первый вариант, то нажмите на временный объект aCell, который разрушается, когда цикл завершается. Любое объяснение того, что происходит под капотом этого ценится. EDIT: код фиксированной из-за ошибки отметил Сэм Varshavchik и songyuanyao который разрушается, когда цикл завершается. Любое объяснение того, что происходит под капотом этого ценится. EDIT: код фиксированной из-за ошибки отметил Сэм Varshavchik и songyuanyao который разрушается, когда цикл завершается. Любое объяснение того, что происходит под капотом этого ценится. EDIT: код фиксированной из-за ошибки отметил Сэм Varshavchik и songyuanyao
TuanDT
1

голосов
1

ответ
26

Просмотры

Ошибка: Lvalue требуется в качестве левого операнда назначения при тестировании divisibilty

На C ++, я хочу сказать, что если сумма, введенная делится на 20, то вывести решение. Тем не менее, это говорит о том, что операнд для второй линии должен быть слева. Заранее спасибо! CIN >> amountEntered; если (amountEntered / 20 = 0) {соиЬ
Hannah B.
1

голосов
1

ответ
693

Просмотры

Являются Массивы как lvalues ​​в JavaScript ECMAScript-совместимый?

Firefox 3.5.3 (по крайней мере) позволяет мне писать код, как: вар массив = [4, 5, 6]; вар Foo, бар, Баз; [Foo, бар, Баз] = массив; в какой момент Foo => 4 бара => 5 База => 6, которые могут быть весьма полезны для кода ясности. Считается ли ECMAScript-совместимый? Я не вижу ничего в спецификации, но JSLint возвращает ошибку.
Jason Persampieri
1

голосов
3

ответ
4.4k

Просмотры

GCC ошибка при компиляции: «Lvalue требуется в качестве левого операнда назначения» с указателем функции

У меня есть код C, который записывает адрес процедуры в качестве пустоты массива * lpProcAddress [5]; ЬурейиЙ беззнаковый длинный (* MyFunction_TYPE) (недействительный *); #define MyFunctionInArray ((MyFunction_TYPE) lpProcAddress [0]) неподписанных долгое AnyFunction (пустота * lpPointerToAny) {/ * Некоторые код * / возврат 0; } INT основных () {MyFunctionInArray = AnyFunction; // Вывод: «Ошибка: Lvalue требуется в качестве левого операнда назначения»} GCC показывает «ошибка: именующая требуется в качестве левого операнда назначения». Как я могу это исправить? Для моих целей, я не мог позвонить непосредственно AnyFunction ().
Julien
1

голосов
1

ответ
965

Просмотры

Octave vectorize strsplit return value into separate variables

У меня есть файл со списком записей, которые я анализирую одну строку за один раз. Каждая запись новой строки с разделителями, и каждое значение ограничено пространством. Это просто упрощенный пример, но он имеет структуру, подобную реальных данных. Боб синий пицца Салли красный суши Первое значение является именем, то их любимый цвет, то их любимая еда. Скажем, это в цикле обработки, и я хочу, чтобы установить переменные для каждого значения. Для первой линии, мои ценности должны выглядеть следующим образом. friendsName = "Bob"; favoriteColor = "синий"; favoriteFood = "пицца"; Я прочитал в строке и начать с lineInFile = «Боб голубой пиццы»; strsplit кажется хорошей идеей, но она выводит массив ячеек вместо матрицы строк и я в конечном итоге с strsplit (lineInFile ",«) = {[1,1] = Боб [1,2] = синий [1, 3] = пицца} Я хочу что-то вроде {friendsName, favoriteColor, favoriteFood} = strsplit (lineInFile, "«); Это дает мне ошибку: неверная функция именующей называется в экспрессии Массивах может быть использована в качестве lvalues, поэтому я попытался cell2mat (strsplit (lineInFile, "«)) ANS = Bobbluepizza Это не то, что я хочу.
Charity Leschinski
39

голосов
3

ответ
2.5k

Просмотры

Почему и когда тройной оператор возвращает именующее выражение?

Долгое время я думал, что тройной оператор всегда возвращает RValue. Но, к моему удивлению, это не делает. В следующем коде я не вижу разницы между значением, возвращаемым обув и возвращаемого значения троичного оператора. #include INT г = 20; INT Foo () {возвращение г; } INT основных () {Int я = 2, J = 10; Foo () = 10; // не ОК ((I <3) я: к) = 7; // Ok станд :: соиЬ
Soulimane Mammar
24

голосов
5

ответ
1.9k

Просмотры

Почему литералы и временные переменные не lvalues?

Я читал, что lvalues ​​является «вещами с определенным местом хранения». А также, что литералы и переменные временных не lvalues, но нет никаких оснований даются для этого заявления. Это потому, что литералы и временные переменные не определили место хранения? Если да, то где они находятся, если не в памяти? Я предполагаю, что есть некоторое значение «определенный» в «определенном месте хранения», если есть (или нет), пожалуйста, дайте мне знать.
pasha
1

голосов
1

ответ
220

Просмотры

Как скопировать из переменных примитивных типов при прохождении через аргументы опорного Rvalue функции

Я могу скопировать из переменного непримитивных типа с помощью конструктора копирования и передать его через эталонный Rvalue аргумент функции. Но как сделать это с помощью переменных примитивных типов? например: #include #include структура МойКласс {INT т = 0; }; МойКласс & F (МойКласс & х) {x.m ++; вернуться х; } Встроенного МойКласс F (МойКласс && х) {возвращение F (X); } INT & F (интермедиат & х) {х ++; вернуться х; } Инлайн INT F (INT && х) {возвращение F (X); } INT основных () {МойКласс x1; автоматическое у1 = F (МойКласс (x1)); // Вызовы п (МойКласс &&) // Результат: x1.m = 0, y1.m = 1 INT х2 = 0; Авто у2 = е (интермедиат (х2)); // Вызов п (интермедиат &) // Результат: x2 = 1, y2 = 1 станд :: соиЬ
A.Danesh
1

голосов
1

ответ
55

Просмотры

В программировании C, L-значение, требуемое является семантическая ошибка или ошибка синтаксиса?

1. INT основных (недействительными) 2. {3. Int А = 5, б = 6, с; 4. а + Ь = с; // именующие требуется ошибка 5. 2 = а; // именующей требуются ошибка 6.} 4 и 5 строк коды рассматриваются как ошибки синтаксиса или семантическая ошибка? По мне, эти строки должны бросить синтаксическую ошибку, но я обнаружил, что контекстно-свободной грамматики может генерировать их.
user9014873
1

голосов
2

ответ
1k

Просмотры

Javascript Назначение функции с помощью Eval

У меня возникли проблемы переназначения функций. Я хочу, чтобы назначить ранее определенную функцию, drawScene другой метод. Функция fSwap (имя_функции, код) {Eval (имя_функция) = Eval (код); } FSwap ( "drawScene", "функция drawScene () {/ * Do что-то * /}"); Я чувствую, как это должно работать, но по какой-то причине Eval (имя_функция) не является Левым и возвращает ReferenceError об ошибке: недопустимое назначение левой стороны. Тем более озадачивает: а = тест функция Var () {возврат 0;}; предупреждение (а === Eval ( "а")); Eval ( "а") = тест функция () {возвращает 1;}; Дает предупреждение верно, но не позволяет мне присвоить функции а. Мое единственное предположение, что Eval () не возвращает lvalues ​​по соображениям безопасности. Если да, то как я могу реализовать fSwap () таким образом, что он принимает в две строки и присваивает код для данного имени функции?
JDong
3

голосов
4

ответ
207

Просмотры

Confused с г-значений и значений л

Недавно я прочитал на официальный документ на C ++ 11, что если я пишу, недействительный Foo (Х &) Это будет вызываться для л значений, но не для г-значений и, если я пишу, недействительный Foo (сопзИ Х &) Это будет называется как для г-значения и L-значения. Может кто-нибудь дать мне пример того, что это означает, что здесь?
cpp11dev
1

голосов
2

ответ
99

Просмотры

почему C ++ Rvalue не неизменны

Код: недействительный тест (интермедиат && а) {а ++; станд :: соиЬ
harborn
1

голосов
3

ответ
88

Просмотры

Как (традиционный, до C ++ 11 lvalue-) ссылки работают в C ++

Указатели легко. Существует некоторая память, которая имеет адрес. Для того, чтобы получить (содержательного) значение Разыменование возвращает значение, содержащееся в памяти адрес указывает на. Ссылки сделать как-то что-то похожи: они держат «ссылку» на временный объект. Но что происходит, когда я задаю или использовать ссылку? # include с помощью патезраса; Int один () {возвращает 1; } INT основных () {& Const INT = Рона один (); соиЬ
ManuelSchneid3r
1

голосов
1

ответ
148

Просмотры

Пример неконстантных ссылок именующей

Может кто-то дало пример «ссылки неконстантной Lvalue»? Мне нужно передать объект в рутину, где состояние объекта будет изменено, после того, как процедура завершена, я ожидаю использовать объект с измененным состоянием. Я читал в другом месте, что я должен передать объект как: «неконстантную ссылка Lvalue.» Что это такое и кто-то может привести пример?
Marco
1

голосов
1

ответ
102

Просмотры

C ++ - выражение должно быть изменяемым именующим выражение?

Поэтому я реализую BST прямо сейчас, и я пытаюсь написать функцию преемника. Это то, что я прямо сейчас: INT BinarySearchTree :: TREE_SUCCESSOR (узел * х) {узел * у = NULL; если (x-> правый! = NULL) {вернуться FIND_MIN (x-> справа); } Еще {у = х> родитель; в то время как (у = NULL && х = y-> правый!) {х = у; у = у-> родителя; } Вернуться y-> ключ; }} Однако на этой линии: в то время как (у = NULL && х = y-> правильно!) Я получаю эту ошибку на у: Выражение должно быть изменяемой именующей Почему я получаю эту ошибку? Любая помощь будет принята с благодарностью, спасибо !!
ocean800
1

голосов
3

ответ
113

Просмотры

Как получить через указатели?

Вот маленький кусочек кода, который я не могу понять ИНТ х = 30, * у * г; у = & х; г = у; // у ++ = г ++; // * у ++ = * г ++; х ++; Е ( "х =% р, у =% р, г =% ру =% р \ п", & х, у, г, у ++); возвращать 0; Эти сомнения меня преследуют: почему (г ++ = у ++;) недействительным назначение в то время как (г = у) справедливы. что делает это назначение (* у ++ = * г ++) означает? Кроме того, если я запускаю эту программу, я получаю следующий результат: х = 0028FF04, у = 0028FF08, г = 0028FF04 у = 0028FF04 в то время как мое ожидание х = 0028FF04, у = 0028FF04, г = 0028FF04 у = 0028FF08
Skant
18

голосов
4

ответ
3.1k

Просмотры

Rvalue Ссылка рассматривается как именующая?

Я отправил этот ответ: https://stackoverflow.com/a/28459180/2642059 который содержит следующий код: Foo недействительным (строка && бар) {строка * Темп = & бар; соиЬ
Jonathan Mee
1

голосов
4

ответ
113

Просмотры

Литье и указатель литья в C ++

Может кто-нибудь объяснить мне, почему это так: символ * р; Короче я; длинные л; (Длинный *) р = & л; / * * Правовая литой / (длинный) я = л; / * Нелегальный литой * / Я знаю, что есть что-то делать с Левым и правым, но не должен (длинным *) р- Rvalue? Редактирование: жаль, что, кажется, я путать себя и другие, я спросил это в то время, читая «это MDSN», и я был удивлен, увидев этот синтаксис, я вижу, что это специальная функция, которая позволяет конвертировать именующее выражение в Lvalue до тех пор, как это тот же размер.
Vladp
15

голосов
4

ответ
3.5k

Просмотры

Какие виды использования Lvalue подпрограмм в Perl?

Я не понимаю, что может быть использование Lvalue подпрограмм? Что это такое, что я не могу выполнить с нормальными подпрограммами? Не могли бы вы опубликовать некоторые примеры? Спасибо
Geo
18

голосов
3

ответ
1.4k

Просмотры

В C ++ 11, как я могу получить временное именующее выражение без имени?

У меня есть традиционный C Lib и функция (setsockopts) хочет аргумент по указателю. В C ++ 11 (GCC 4.8), я могу передать этот аргумент без инициализации переменной с именем? У меня есть следующий, не-удовлетворяющее решение: # include # include INT deref (интермедиат Const * р) {возвращение * р;} используя патезрас; INT основных () {INT Arg = 0; соиЬ
not-a-user
1

голосов
1

ответ
1.5k

Просмотры

Перечислимые данные и вектор ошибка: выражение должны быть изменяемой именующим

Я получаю сообщение об ошибке на линиях, где я ввод «название» и «Автор». Я не совсем уверен, что нужно сделать, чтобы это исправить. структура bookStruct {символ заголовка [40]; голец автор [40]; ИНТ страницы; ИНТ год; }; Меню {перечислимый дисплей = 1, добавить, конец}; displayOptions недействительными (); displayBooks недействительными (); INT основных () {вектор книги (11); вариант строки; Книга [0] .title = "а"; Книга [0] = .author "б"; Книга [0] .стр = 23; Книга [0] .year = 21; Показать варианты(); CIN >> вариант; displayBooks (книга); возвращать 0; }
user2105982
2

голосов
2

ответ
50

Просмотры

Именующая конверсии RValue не выполняются

Следующая функция возвращает RValue: Int Foo () {Int х = 42; вернуться х; // х преобразуется в prvalue} AST лязгом также показывает преобразование: `-FunctionDecl строки: 1: 5 Foo 'Int ()'` -CompoundStmt | -DeclStmt | `-VarDecl Col: 9 используется ВНУТР CInit х | ` 'INT' -IntegerLiteral 42` `-ReturnStmt -ImplicitCastExpr 'INT' ^^^^^^^^^^^^^^` -DeclRefExpr 'INT' именующее вар 0x627a6e0 'х' 'INT' также следующее выполняет операцию Lvalue для RValue преобразования, на этот раз для параметра происходит в функцию. недействительными F (INT I) {} INT основных () {INT х {3}; F (X); } АСТ включает в себя преобразование: `-FunctionDecl строки: 2: 5 главное 'Int ()'` -CompoundStmt | -DeclStmt | `-VarDecl Col: 9 используется х ' Int»listinit | `-InitListExpr 'INT' | `-IntegerLiteral 'INT' 3` -CallExpr 'пустота' | '-ImplicitCastExpr недействительным (*) (целое)' | `-DeclRefExpr 'недействительный (INT)' Lvalue функции 0x6013660 'F' 'недействительным (целое)'` -ImplicitCastExpr 'INT' ^^^^^^^^^^^^^^ `-DeclRefExpr 'INT' именующего Var 0x60138a0 «х» «INT» Как я понимаю, таким же образом, следующий должен также требовать именующего выражения для преобразования RValue. структура А {}; недействительными F (A а) {} INT основных () {А а; е (а); } Но она никогда не появится в AST: `Пустотой -CallExpr | Пустота (*) (A) '-ImplicitCastExpr | `-DeclRefExpr 'недействительным (А)' Функция 0x615e830-значение 'F' 'недействительным (А)'` -CXXConstructExpr ' A» 'недействительным (сопзЬ &) noexcept' ' 'Const A' -ImplicitCastExpr именующее` -DeclRefExpr 'A' именующее Var 0x615ea68 'а' 'А' Почему? Является ли преобразование факультативно иногда?
wally

Просмотр дополнительных вопросов