我试图std::tie()
按照以下代码交换两个变量(我知道std::swap
,我只是出于好奇而尝试这个):
#include#include using std::cin; using std::tie; using std::cout; using std::endl; using std::make_pair; int main() { int a = 2, b = 10; cout << "Before Swapping using {}" << endl; cout << "a: " << a << " b: " << b < 我用它编译了它
g++ test.cpp -std=c++11 -o test
.但输出是这样的:
Before Swapping using {} a: 2 b: 10 After Swapping using {} a: 10 b: 10 Before Swapping using make_pair() a: 2 b: 10 After Swapping using make_pair() a: 10 b: 2所以,我的问题是,因为我们可以编写
{a, b}
而不是std::make_pair(a, b)
每次编写(C++ 11以后),为什么这两个版本提供不同的输出?我的猜测是以下一行
std::tie(a, b) = {b, a};没有成对,出于某种原因只是改变了它的价值
a
.但我不确定.
1> Jarod42..:
tie(a, b) = {b, a};
会用的
std::tuple
.而不是operator = (std::tuple &&) std::tuple
你所期望的.operator = (std::tuple &&)
std::tie(a, b)
是一个std::tuple
.
std::tuple
有几个operator =
,但唯一可行的(非类型){a, b}
是复制/移动分配.
2> François And..:
{b, a}
使得std::tuple
同时std::make_pair
使一个std::pair
.考虑一下会发生什么
std::pair
.它实际上是将一个变量分配给另一个变量,然后尝试将另一个变量分配给第一个变量.它相当于做a = b; b = a;
或b = a; a = b;
.