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

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

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

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

09.02.2013, 23:17. Просмотров 361. Ответов 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     Странное поведение кода
Посмотрите здесь:

Странное поведение cin - C++
Перегружаю оператор ввода следующим образом: #include &lt;iostream&gt; using namespace std; class Vector2D { public: ...

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

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

Странное поведение строки - C++
Есть класс со связным списком(в связных списках символы)(файл1). Перегружаю оператор сложения для объектов этих классов так, чтобы оператор...

Странное поведение программы - C++
Здравствуйте, у меня проблема. В силу какой-то причины результатом вычисления выражения при значениях PA и PB равных 0 и 1 соответственно,...

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

Странное поведение string - C++
Здравствуйте. Сейчас я пытаюсь скомпилировать под Windows проект, который ранее писался под Linux. Делаю я это с помощью MinGW от...

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

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

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,120
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
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
10.02.2013, 01:36     Странное поведение кода #3
"запись значения в переменную при присваивании есть пример побочного эффекта". В итоге получается непредсказуемый результат, который на разных компиляторах выдаст разные значения. GCC например, выдаст предупреждение.
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 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     Странное поведение кода
Ответ Создать тему
Опции темы

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