array[j + 1] = array[j--]; 这个语句有问题么?

int j;
...
...
array[j + 1] = array[j--];

array[j + 1] = array[j--]是否一定等价于array[j + 1] = array[j]; j--;

阅读 1.8k
2 个回答

C++17之前是UB。C++17确定了顺序:赋值操作符的右侧操作数先序于左侧。所以左侧得到的是自减后的值。故而array[j + 1] = array[j--];一般等价于(并发例外)

array[j] = array[j];
--j;
8.18.1[expr.ass] ...In all cases, the assignment is sequenced after the value computation of the right and left operands, and before the value computation of the assignment expression. The right operand is sequenced before the left operand...

array[j + 1] = array[j--]; 属于未定义行为。
两个顺序点之间访问和修改了同一个对象。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题