Помогает ли здесь размещение оператора предварительного увеличения?

В следующем коде 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;, Я не уверен, стоит ли мне беспокоиться об этом.

1

Решение

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

По связанному вопросу Так почему же i = ++ i + 1 четко определено в C ++ 11? первая форма является допустимой в C ++ 11 из-за более ограниченной последовательности операций записи.

Я считаю, что второй случай не очень хорошо определен как порядок оценки операндов = не указаны.

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

3

Другие решения