a=b=a++; 的正确输出是什么?

What is the correct output of a=b=a++;?

我在 visual studio 和在线 gdb 上测试了这段代码:

int a = 10;
int b = 15;
a = b = a++;
cout << a << " " << b;

在 visual studio 中输出为 11 10,在 gdb 中输出为 10 10。 为什么有区别? 正确的输出是什么?

根据我的理解如果给定 a = b = 6 它实际上是:

b = 6
a = b

在我们的程序中是这样的:

b = a
a += 1
a = b

因此将打印 10 10

10 10 从 C++17 开始是正确的。赋值运算符的右操作数 顺序在 左操作数之前——这意味着与右操作数相关的所有求值和副作用在左操作数开始求值之前完成。延伸阅读:Undefined behavior and sequence points

在 C++17 之前,行为未定义,请参阅 Undefined behavior and sequence points