Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > C++ Monster


Автор: EXTR PROGRAMMER 26.3.2005, 18:21
Привет, Народ.

Пожалуйста, подскажите, как действует компилятор в данном случае:
int a = 7;
a++ = 3;

И почему компилятор выдает ошибку.

Автор: Doc_d0s 26.3.2005, 18:42
Дык ты операции значение присваиваешь smile)))))))

Автор: chipset 26.3.2005, 18:51
Цитата(EXTR @ 26.3.2005, 07:21)
a++
- это lvalue.

Автор: Дрон 26.3.2005, 19:16
chipset
как раз это не lvalue smile

Автор: chipset 26.3.2005, 19:38
Цитата
chipset
как раз это не lvalue smile

Да, тьфу ты, конечно..
rvalue это, поэтому присваивать низзя ничего smile

Автор: EXTR PROGRAMMER 26.3.2005, 19:59
Мда... а как это переменная, с применненной к ней операцией, может быть rvalue?

Автор: En_t_end 26.3.2005, 20:04
возможно имелась ввиду операция : a += 3, тогда получиться a = 10.
Добавлено @ 20:07
Да и к тому же по логике, зачем прибавлять к значению переменной еденицу, если ей сразу же будет присвоено 3. Зачем ?
Добавлено @ 20:12
a = 8 = 3 вот что точнее получиться smile
Добавлено @ 20:13
По сути двойное присвоение в одной строке.

Автор: EXTR PROGRAMMER 26.3.2005, 20:23
Цитата(En_t_end @ 26.3.2005, 20:04)
Знаешь что это значит ?
8 = 3

Неа..., это 7 = 3.


Цитата(En_t_end @ 26.3.2005, 20:04)
Да и к тому же по логике, зачем прибавлять к значению переменной еденицу, если ей сразу же будет присвоено 3. Зачем ?


А нет никакой логики в примере. Я задал этот вопрос для того, чтобы понять, как работает компилятор. Логика примера - понимание С++


Цитата(En_t_end @ 26.3.2005, 20:04)
a = 8 = 3 вот что точнее получиться

Такое и в страшном сне не получится, не то что в С++ smile ...даже если 8 заменить на 7.


Цитата(En_t_end @ 26.3.2005, 20:04)
Добавлено @ 20:13
По сути двойное присвоение в одной строке.

Я написал один оператор присвоения. Откуда взялся №2?


Автор: En_t_end 26.3.2005, 20:31
Цитата
Неа..., это 7 = 3.

Хех, нет же, только на время выполнения этой операции, что весьма туманно.
Цитата
Я написал один оператор присвоения. Откуда взялся №2?

Сначала присваевается переменной значение 3, потом 4, вроде, но на самом деле в стеке ИМХО уже лежит 7(так как a++, как раз и указывает, что действие будет произведенно после этой операции(a = 3)), значит будет присвоенно 8, короче в результате 8 и будет.
Добавлено @ 20:33
ИМХО* не знаю, что думает по этому поводу компилятор, но я бы сказал, что это конфликт двух констант.*ИМХО

Автор: En_t_end 26.3.2005, 20:44
'=' : left operand must be l-value
Усе правивильно chipset подумал, это r-value.
Читаем Страуструпа.

Автор: chipset 26.3.2005, 21:21
Цитата(En_t_end @ 26.3.2005, 09:44)
Усе правивильно chipset подумал, это r-value.

Я подумал наоборот, точнее, я подумал так, а написал не так как меня исправил Дрон, тьфу...

Автор: azesmcar 28.3.2005, 08:57
вот так можно...
Код

++a = b;

потому что ++а возвращает lvalue а а++ нет...а++ примерно так работает
Код

int tmp;
tmp = a;
a += 1;
return tmp;

и возвращaет int а ++а работает так
Код

a += 1;
return a;

и возвращaет int&

Добавлено @ 08:59
точно также можно написать ++++++++++a но никак не a++++

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)