Строка кода на C
x = x |= (1 << 3);
который дает ошибку cppCheck: «Выражение« x = x | = 1 »зависит от порядка оценки побочных эффектов»
тогда как линия
x |= (1 << 3);
is ok.
я думал
x = x |= (1 << 3);
будет таким же, как
x = x = x | (1 << 3);
что просто
x = (x = (x | (1 << 3)));
где на самом деле внешнее присвоение x не имеет никакого эффекта, то есть результат такой же, как и
x |= (1 << 3);
Так на что именно жалуется CppCheck?
редактировать: думаю, что это дубликат того, почему j = j++
является или не совпадает с j++
, который обсуждается в вопросе, упомянутом выше.