2016-05-20 1 views
-4

Что такое стратегия выполнения, которую использует среда выполнения C++ для создания вывода 4545 при выполнении приведенного ниже кода.Как оцениваются операторы приращения/декремента pre и post в C++, когда они происходят неоднократно в одном заявлении cout?

#include <iostream> 
using namespace std; 
int main() 
{ 
    int a=5; 
    cout  <<a++  <<++a  <<a--  <<--a; 
} 

Я ожидал, что выход будет 5444

Пожалуйста, помогите мне понять, как C++ во время выполнения обрабатывает этот код.

+3

Это неопределенное поведение. –

+2

Является ли эта часть индийской учебной программы или что-то еще? Почему мы видим это почти каждый день? –

+2

Ваша программа вызывает UB. Все может случиться. Компилятор может сделать что угодно. Он может отформатировать ваш жесткий диск, сделать вашу подругу беременной, что бы она ни любила! – Destructor

ответ

0

C++ runtime обрабатывает всю программу , однако ему нравится, потому что ваша программа имеет неопределенное поведение.

Не связывайте операции приращения/уменьшения, подобные этому.

Это было сказано в тысячах раз!

Кстати, среда выполнения C++ не «выполняет» вашу программу; это не Ява. Ваш процессор выполняет вашу программу. Среда выполнения C++ находится там, чтобы предоставить библиотеки и еще что-то, чтобы поддержать это выполнение.

+0

@Destructor: Это не дубликат. –

+0

Это точный дубликат. Неважно, верите вы или нет. – Destructor

+0

@Destructor: Это, очевидно, не точный дубликат. Выполните текст diff на нем или откройте глаза, в зависимости от того, что вам подходит. В качестве опоры, обойтись, думая, что вклад других людей «не имеет значения», не является хорошим способом жить своей жизнью. –