Множество операторов ++ в одном выражении [дубликаты]

0

Может ли кто-нибудь объяснить, почему следующие два фрагмента имеют разные результаты?

int x=0;
cout<<x++<<" "<<x++;

а также

int x=0;
cout<<x++<<" ";
cout<<x++;
Теги:
cout

3 ответа

1

Первое - это неопределенное поведение, так как оно включает в себя две необъективные записи в x. Неопределенное поведение означает, что все идет.

0

Многократная запись одного объекта между двумя точками последовательности - это неопределенное поведение. Ваш первый фрагмент кода изменяет значение x дважды до появления следующей точки последовательности, поэтому это неопределенное поведение. Не пишите такой код. Изучение возможных выходов этого кода для разных реализаций также бессмысленно.

-3
int x = 0; cout<<x++<<" "<<x++

похож на,

int x = 0;
cout<<x;
cout<<" ";
x = x+1;
x = x+1;

Таким образом, на этой строке вы получите распечатку 0, а x будет 2, если вы запустили cout<<x чуть ниже этой строки.

Второе утверждение,

int x=0; cout<<x++<<" "; cout<<x++;

эквивалентно,

int x =0;
cout<<x;
cout<<" ";
x = x+1; //note x gets 1 here
cout<<x; //will print 1 here due previous increment, not the second one
x = x +1;

Таким образом, в этом случае вы получите распечатку 1, но снова x будет 2, если вы запустили cout<<x на следующей строке.

  • 0
    это неопределенное поведение, см. другие ответы

Ещё вопросы

Сообщество Overcoder
Наверх
Меню