关于c++中运算符优先级的困惑

Confusion about operator precedence in c++

我正在学习 C++,目前正在学习运算符优先级。我正在玩以下示例。将每个片段想象成不同时间的不同代码片段 运行,而不是同一方法中的多个代码块。

int b = 4;
int result = ++b;

// In the above example the result will be 5, as expected.
int b = 4;
int result = ++b + b; 

// Here the result will be 10 as expected.
int b = 4;
int result = ++b + ++b;

这里的结果是12,我不明白为什么。编译器不应该评估 ++b 将 4 更改为 5,然后 ++b 将 5 更改为 6,从而导致 5+6 = 11?

这是未定义的行为,violating sequence rules

在上一个和下一个 sequence points 之间,标量对象的存储值必须通过表达式的求值最多修改一次,否则行为未定义。

int b = 4;
int result = ++b + ++b;