关于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;
我正在学习 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;