预增量运算符的放置在这里会有所不同吗?

Does the placement of a pre-increment operator make a difference here?

在下面的C++代码中,最后的xy的值有区别吗?

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 之前是完全未定义的,因为它们都写入相同的内存位置而没有中间序列点。

根据链接的问题 So why is i = ++i + 1 well-defined in C++11? 第一种形式在 C++11 中是合法的,因为写入顺序更受限制。

我认为第二种情况没有明确定义,因为未指定 = 的操作数的评估顺序。

幸运的是,所有这些问题都可以通过永远不会编写任何与此类似的代码来避免。您未来的代码维护者会感谢您并向您发送来自未来的礼物。