![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
EXTR PROGRAMMER |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 1.12.2004 Репутация: нет Всего: нет |
Привет, Народ.
Пожалуйста, подскажите, как действует компилятор в данном случае: int a = 7; a++ = 3; И почему компилятор выдает ошибку. |
|||
|
||||
Doc_d0s |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 15.12.2004 Где: в кресле Репутация: 2 Всего: 3 |
Дык ты операции значение присваиваешь
![]() --------------------
Админ- это вождь Apache'й :) |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
--------------------
|
||||
|
|||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 92 |
chipset
как раз это не lvalue ![]() -------------------- Да. Именно так. |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Да, тьфу ты, конечно.. rvalue это, поэтому присваивать низзя ничего ![]() Это сообщение отредактировал(а) chipset - 26.3.2005, 19:38 --------------------
|
||||
|
|||||
EXTR PROGRAMMER |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 1.12.2004 Репутация: нет Всего: нет |
Мда... а как это переменная, с применненной к ней операцией, может быть rvalue?
|
|||
|
||||
En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
возможно имелась ввиду операция : a += 3, тогда получиться a = 10.
Добавлено @ 20:07 Да и к тому же по логике, зачем прибавлять к значению переменной еденицу, если ей сразу же будет присвоено 3. Зачем ? Добавлено @ 20:12 a = 8 = 3 вот что точнее получиться ![]() Добавлено @ 20:13 По сути двойное присвоение в одной строке. Это сообщение отредактировал(а) En_t_end - 26.3.2005, 20:16 |
|||
|
||||
EXTR PROGRAMMER |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 1.12.2004 Репутация: нет Всего: нет |
Неа..., это 7 = 3.
А нет никакой логики в примере. Я задал этот вопрос для того, чтобы понять, как работает компилятор. Логика примера - понимание С++
Такое и в страшном сне не получится, не то что в С++ ![]()
Я написал один оператор присвоения. Откуда взялся №2? |
||||||||
|
|||||||||
En_t_end |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
Хех, нет же, только на время выполнения этой операции, что весьма туманно.
Сначала присваевается переменной значение 3, потом 4, вроде, но на самом деле в стеке ИМХО уже лежит 7(так как a++, как раз и указывает, что действие будет произведенно после этой операции(a = 3)), значит будет присвоенно 8, короче в результате 8 и будет. Добавлено @ 20:33 ИМХО* не знаю, что думает по этому поводу компилятор, но я бы сказал, что это конфликт двух констант.*ИМХО |
||||
|
|||||
En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
'=' : left operand must be l-value
Усе правивильно chipset подумал, это r-value. Читаем Страуструпа. |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Я подумал наоборот, точнее, я подумал так, а написал не так как меня исправил Дрон, тьфу... Это сообщение отредактировал(а) chipset - 26.3.2005, 21:21 --------------------
|
||||
|
|||||
azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
вот так можно...
потому что ++а возвращает lvalue а а++ нет...а++ примерно так работает
и возвращaет int а ++а работает так
и возвращaет int& Добавлено @ 08:59 точно также можно написать ++++++++++a но никак не a++++ |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |