c++ - C++ 中的并行赋值

标签 c++

有没有办法在C++中进行并行赋值?目前,以下编译(带有警告)

#include <iostream> 

int main() { 
  int a = 4;
  int b = 5;
  a, b = b, a;
  std::cout << "a: " << a << endl
            << "b: " << b << endl;

  return 0;
}

并打印:

a: 4
b: 5

我希望它打印的内容......如果不明显的话,是:

a: 5
b: 4

例如,Ruby 或 Python。

最佳答案

这是不可能的。您的代码示例

a, b = b, a;

按以下方式解释:

a, (b = b), a

它什么也没做。逗号运算符使其返回 a 的值(最右边的操作数)。因为赋值绑定(bind)更紧密,所以 b = b 在括号中。

正确的做法是

std::swap(a, b);

Boost 包含一个元组类,您可以使用它来执行操作

tie(a, b) = make_tuple(b, a);

它在内部创建一个对 a 和 b 的引用的元组,然后为它们分配一个 b 和 a 的元组。

关于c++ - C++ 中的并行赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47926650/

相关文章:

c++ - 如何在boost::grid_graph中使用给定的vertex_descriptor访问edge_descriptor

c++ - 生成的大型 BMP 文件已损坏

c++ - 通过 Linux 将字节文件通过管道传输到 C++ 程序并逐字节读取?

c++ - 可以安全地使用复制/移动构造函数来实现复制/移动赋值运算符吗?

c++ - 在 Visual Studio Ctrl+F5 中发布版本比从外部 VS 慢 10 倍

c++ - 为游戏引擎中的自定义内存分配重载 'new' 和 'delete' 有什么好处?

c++ - Windows 10 1709 中日语输入法的奇怪行为

c++ - Netbeans C/C++ 链接器问题

c++ - 将 SQLite 与 WinRT 结合使用

c++ vector将所有元素存储为最后一个元素