| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > C++ Monster |
| Автор: EXTR PROGRAMMER 26.3.2005, 18:21 |
| Привет, Народ. Пожалуйста, подскажите, как действует компилятор в данном случае: int a = 7; a++ = 3; И почему компилятор выдает ошибку. |
| Автор: Doc_d0s 26.3.2005, 18:42 |
| Дык ты операции значение присваиваешь |
| Автор: chipset 26.3.2005, 18:51 | ||
|
| Автор: Дрон 26.3.2005, 19:16 |
| chipset как раз это не lvalue |
| Автор: chipset 26.3.2005, 19:38 | ||
Да, тьфу ты, конечно.. rvalue это, поэтому присваивать низзя ничего |
| Автор: 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 вот что точнее получиться Добавлено @ 20:13 По сути двойное присвоение в одной строке. |
| Автор: EXTR PROGRAMMER 26.3.2005, 20:23 | ||||||||
Неа..., это 7 = 3.
А нет никакой логики в примере. Я задал этот вопрос для того, чтобы понять, как работает компилятор. Логика примера - понимание С++
Такое и в страшном сне не получится, не то что в С++
Я написал один оператор присвоения. Откуда взялся №2? |
| Автор: En_t_end 26.3.2005, 20:31 | ||||
Хех, нет же, только на время выполнения этой операции, что весьма туманно.
Сначала присваевается переменной значение 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 | ||
Я подумал наоборот, точнее, я подумал так, а написал не так как меня исправил Дрон, тьфу... |
| Автор: azesmcar 28.3.2005, 08:57 | ||||||
вот так можно...
потому что ++а возвращает lvalue а а++ нет...а++ примерно так работает
и возвращaет int а ++а работает так
и возвращaет int& Добавлено @ 08:59 точно также можно написать ++++++++++a но никак не a++++ |