我在使用std::thread
时又遇到了问题,这一次是在应用std::move
交换两个值时。我的代码如下:
#include <iostream>
#include <thread>
using namespace std;
void swapno (int &&a, int &&b)
{
int temp=move(a);
a=move(b);
b=move(temp);
}
int main()
{
int x=5, y=7;
cout << "x = " << x << "\ty = " << y << "\n";
// swapno (move(x), move(y)); // this works fine
thread t (swapno, move(x), move(y));
t.join();
cout << "x = " << x << "\ty = " << y << "\n";
return 0;
}
输出:
x = 5 y = 7
x = 5 y = 7
现在这个方法有什么问题?为什么这段代码会显示这样的行为?我该如何纠正它?
x
和y
的副本而不是引用它们。你可以传递x
和y
的指针代替。 - undefinedstd::swap
。 - undefinedswapno
函数。 - undefinedstd::move(x)
之后,变量x
不能再作为右值使用,因为它的值已经被移动到另一个变量中。 - undefined