История изменений
Исправление Shadow1251, (текущая версия) :
Стандарт не гарантирует порядок вычисления аргументов, он implementation defined. Когда ты делаешь
int a = 1;
foo(a, ++a);
, то возможны два варианта:
1. сначала вычислится ++a и на фрэйм стэка вызванной функции ляжет 2 и 2
2. сначала будет вычислен и передан первый аргумент a(=1), а потом ++a(=2)
ISO International Standard ISO/IEC 14882:2014 1.9.15 If a side effect on a scalar object is unsequenced relative to either another side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined.
Исходная версия Shadow1251, :
Стандарт не гарантирует порядок вычисления аргументов, он implementation defined. Когда ты делаешь
int a = 1;
void foo(a, ++a);
, то возможны два варианта:
1. сначала вычислится ++a и на фрэйм стэка вызванной функции ляжет 2 и 2
2. сначала будет вычислен и передан первый аргумент a(=1), а потом ++a(=2)
ISO International Standard ISO/IEC 14882:2014 1.9.15 If a side effect on a scalar object is unsequenced relative to either another side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined.