В следующем коде C ++ есть разница между значениями x
а также y
в конце?
const int LoopLength = 100;
unsigned short x = 0;
for (int i = 0; i < LoopLength; i++)
{
x = ++x % 2;
cout << x;
}
cout << endl;
unsigned short y = 0;
for (int i = 0; i < LoopLength; i++)
{
++y = y % 2;
cout << y;
}
cout << endl << (x == y) << endl;
Coverity (инструмент статического анализа) утверждает, что порядок, в котором происходят побочные эффекты, не определен в виде строки x = ++x % 2;
, Я не уверен, стоит ли мне беспокоиться об этом.
Обе формы полностью не определены до C ++ 11, потому что они обе записывают в одну и ту же область памяти без промежуточной точки последовательности.
По связанному вопросу Так почему же i = ++ i + 1 четко определено в C ++ 11? первая форма является допустимой в C ++ 11 из-за более ограниченной последовательности операций записи.
Я считаю, что второй случай не очень хорошо определен как порядок оценки операндов =
не указаны.
К счастью, всех этих вопросов можно избежать никогда никогда написание кода, который где-то похож на это. Ваши будущие разработчики кода будут благодарить вас и отправлять вам подарки из будущего.