我需要在执行以下类型任务的c ++程序中编写某个代码段.
b:=a+b;
a:=a-b;
Run Code Online (Sandbox Code Playgroud)
其中:=运算符表示首先计算所有表达式右侧的值,然后每个表达式左侧的变量等于右侧的计算值.
例如,在上面的代码中,如果a = 5且b = 3,我将需要a和b的最终值分别为8和2而不是8和-3,如果我执行正常分配,我将得到它.
你可以使用std::tie()和std::make_tuple():
std::tie(a, b) = std::make_tuple(a-b, a+b);
Run Code Online (Sandbox Code Playgroud)
tie创建一个引用元组,元组赋值等同于元素分配.所以这实际上与:
// create the right-hand-side-tuple
auto __tmp1 = a-b;
auto __tmp2 = a+b;
// assign to the left-hand-side references
a = __tmp1;
b = __tmp2;
Run Code Online (Sandbox Code Playgroud)
但是由于这里的赋值在概念上是"原子的",所以你可以将它们全部写在一行中 - 因为所有的操作(a-b和a+b)都在赋值之前进行了排序.