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

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

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

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

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

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

Странное поведение - C++
Здравствуйте еще раз :) Теперь возникла другая непонятка. Есть класс StringParser, объекты которого умеют разбивать строку на подстроки,...

Странное поведение new - C++
Объясните почему оператор new выделяет неверное количество памяти? # include &lt;iostream&gt; using namespace std; char* interpitator( int...

Странное поведение указателя - C++
Здравствуйте, наткнулся на непонятное мне поведение указателя или точнее менеджера памяти. Есть код: #include &lt;iostream&gt; #include...

Странное поведение getline - C++
В программе в двух местах используеться getline. В первом случае все супер : string ownerName; getline (cin, ownerName); А во...

Странное поведение (сдвиг) - C++
Здравствуйте.Прошу помочь с задачкой. Программа , должна &quot;сдвигать&quot; данные в один бит(128), но при вызове функции с разными параметрами,...

Странное поведение программы - C++
Перечитываю Герберт Шилдт: С++ базовый курс. Простая программа: #include &lt;iostream&gt; using namespace std; int main() { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
NoMasters
Псевдослучайный
1754 / 1097 / 72
Регистрация: 13.09.2011
Сообщений: 3,134
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
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
10.02.2013, 01:36 #3
"запись значения в переменную при присваивании есть пример побочного эффекта". В итоге получается непредсказуемый результат, который на разных компиляторах выдаст разные значения. GCC например, выдаст предупреждение.
0
Croessmah
Эксперт CЭксперт С++
13225 / 7497 / 845
Регистрация: 27.09.2012
Сообщений: 18,416
Записей в блоге: 3
Завершенные тесты: 1
10.02.2013, 01:45 #4
Цитата Сообщение от colya Посмотреть сообщение
Почему?!?!
почитайте, будет полезно: Точки следования
0
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
10.02.2013, 12:14 #5
colya, обсуждалось что-то подобное не так давно в соседней теме. Странно, что Вы не видели.
0
Nixy
10.02.2013, 12:27     Странное поведение кода
  #6

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2013, 12:27
Привет! Вот еще темы с ответами:

Странное поведение функции - C++
Здравствуйте! Я взялась за реализацию метода Крылова для нахождения коэффициентов характеристического полинома. Написала программу, но...

Странное поведение компилятора - C++
Всем привет! Я конечно понимаю что нужно выкладывать минимальный код повторяющий мою проблему но он будет достаточно грамосток т.к. в...

Странное поведение присваивания - C++
class Lexem { public: uint id; uint value; uint line; uint pos; bool operator==(int a){ return a...

странное поведение fstream - C++
ниже представлен черновой код курсача. как из него видно я пытаюсь работать с файлами, но у меня ничего не выходит. а именно: я создаю...


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

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

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