Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
colya
0 / 0 / 0
Регистрация: 04.02.2013
Сообщений: 12
#1

Странное поведение кода - C++

09.02.2013, 23:17. Просмотров 354. Ответов 5
Метки нет (Все метки)

C++
1
2
int x;
cout << (x = 1) + (x = 2) + (x = 3);
У меня выводит 7 (вместо 6). Почему?!?!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2013, 23:17     Странное поведение кода
Посмотрите здесь:

Странное поведение (сдвиг) C++
C++ Странное поведение компилятора
C++ Странное поведение
Странное поведение wstring C++
странное поведение указателя C++
Странное поведение new C++
Странное поведение cin C++
Странное поведение указателя C++
C++ Странное поведение в коде
C++ Странное поведение указателей
C++ Странное поведение строки
Странное поведение программы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,111
09.02.2013, 23:57     Странное поведение кода #2
Потому, что не надо так писать, ибо результат зависит от компилятора и погоды на Марсе.
Семёрка получилась так: сначала выполняется вычисление в двух первых скобках, в результате чего в x двойка, потом складываются два значения x, получается четыре. Ну и потом в x кладётся тройка и добавляется к четырём.
Кусок asm листинга gcc:
Assembler
1
2
3
4
5
6
7
    movl    $1, -4(%rbp)
    movl    $2, -4(%rbp)
    movl    -4(%rbp), %eax
    leal    (%rax,%rax), %edx
    movl    $3, -4(%rbp)
    movl    -4(%rbp), %eax
    addl    %edx, %eax
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
10.02.2013, 01:36     Странное поведение кода #3
"запись значения в переменную при присваивании есть пример побочного эффекта". В итоге получается непредсказуемый результат, который на разных компиляторах выдаст разные значения. GCC например, выдаст предупреждение.
Croessmah
Модератор
Эксперт CЭксперт С++
12878 / 7264 / 810
Регистрация: 27.09.2012
Сообщений: 17,945
Записей в блоге: 2
Завершенные тесты: 1
10.02.2013, 01:45     Странное поведение кода #4
Цитата Сообщение от colya Посмотреть сообщение
Почему?!?!
почитайте, будет полезно: Точки следования
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
10.02.2013, 12:14     Странное поведение кода #5
colya, обсуждалось что-то подобное не так давно в соседней теме. Странно, что Вы не видели.
Nixy
10.02.2013, 12:27     Странное поведение кода
  #6

Не по теме:

go, ну если учесть что у него 5 сообщений, он не форуичанин и не следит

Yandex
Объявления
10.02.2013, 12:27     Странное поведение кода
Ответ Создать тему
Опции темы

Текущее время: 00:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru