在python中我们可以将两个变量交换为
>>> a , b = b , a
Run Code Online (Sandbox Code Playgroud)
我们可以在C++ 11中进行类似的交换
void swap(int &a,int &b)
{
std::tie(a,b) = std::make_tuple(b,a);
}
Run Code Online (Sandbox Code Playgroud)
以上工作正常,在O3生成类似的装配
void swap(int &a,int &b)
{
int c = a;
a = b;
b = c;
}
Run Code Online (Sandbox Code Playgroud)
但我的问题是它符合标准还是我遗漏了什么?或者像侥幸......
a = (a+b) - (b=a);
Run Code Online (Sandbox Code Playgroud)
哪个有序列点问题.