![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
it_medved |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 1.5.2007 Где: Днепропетровск Репутация: нет Всего: 1 |
Да ну его, я таким бредом заниматся не буду
![]() И все же вернемся к вопросу. Я тут покумекал, и выходит, так ++i; // i==6 ++i;// i==7 i+i// i==13... но с компилятором не поспоришь... это наверное как необьяснимое чудо |
|||
|
||||
Hurricane |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 10.4.2007 Репутация: 6 Всего: 9 |
Как это у тебя 7+7=13 получается - не понимаю ![]() Ну решил компилятор делать сложение после второго инкремента - такая у него логика. На самом деле - важно понимать, что это UB и избегать таких неоднозначностей, а не пытаться объяснить, почему данная реализация компилятора делает так, а не иначе в этом случае. |
|||
|
||||
it_medved |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 1.5.2007 Где: Днепропетровск Репутация: нет Всего: 1 |
не гони! Читай внимательно!!!
![]() ![]() Добавлено через 1 минуту и 8 секунд Так это все зависит от компилятора??? ![]() Добавлено через 1 минуту и 50 секунд UB - Universal Baran? |
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
ага ![]() Undefined Behavior Это сообщение отредактировал(а) nickless - 10.5.2007, 19:55 -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 3 Всего: 25 |
Объяснение не сложное. Выражение ++i + ++i. Нарушает правило которое гласит, что нельзя модифицировать переменную зажатую между 2-мя точками следования более 1-го раза. Это ведет к UB. Здесь я так понимаю 1-я точка находится перед выражением, 2-я после. Если сильно приперло, то можно переписать это выражение с использованием функции.
Такой вариант всегда вернет ожидаемое. Т.к каждая ф-я обрамлена точками следования. Хотя порядок вычисления слагаемых все-равно не определен. |
|||
|
||||
it_medved |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 1.5.2007 Где: Днепропетровск Репутация: нет Всего: 1 |
Раз все пришли к такомы выводу, то будет правильным сказать тем, кто дает такие вопросы на тестах на приеме на работу (не будем говорить кто
![]() ![]() |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Ну неопределенное поведение. То есть ни компилятор, ни стандарт не гарантируют тебе любого правила, по которому твое выражение будет вычислено. В общем, такого надо избегать. |
|||
|
||||
it_medved |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 1.5.2007 Где: Днепропетровск Репутация: нет Всего: 1 |
А мне кажется, что состояние UB надо на уровне компиляции присваивать ошибку!
|
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
turboNOMAD |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 1.1.2007 Репутация: нет Всего: нет |
А можно ткнуть меня носом в компилеры, которые тут выдают че-то другое, кроме 14? Самому лень искать
|
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Было бы неплохо, но пожалуй сложно в реализации. Во всяком случае gcc выдаёт варнинг если компилировать с -Wall -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
it_medved |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 1.5.2007 Где: Днепропетровск Репутация: нет Всего: 1 |
это как? |
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
-------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 3 Всего: 25 |
||||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
it_medved, "проверка на вшивость"? Эта тема уже поднималась, implementation-defined
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |