我的代码是这样的: -
#include <iostream>
#include <thread>
using namespace std;
void swapno (int &a, int &b)
{
int temp=a;
a=b;
b=temp;
}
int main()
{
int x=5, y=7;
cout << "x = " << x << "\ty = " << y << "\n";
thread t (swapno, x, y);
t.join();
cout << "x = " << x << "\ty = " << y << "\n";
return 0;
}
此代码无法编译。任何人都可以帮我解释原因吗?
不仅此代码而且this中的代码也无法通过引用发送std::unique_ptr
。 std::thread
出了什么问题?
答案 0 :(得分:8)
问题是std::thread
复制其参数并在内部存储它们。如果要通过引用传递参数,则需要使用std::ref
或std::cref
函数来创建引用包装。
像
thread t (swapno, std::ref(x), std::ref(y));
答案 1 :(得分:1)
你可以这样做,而不是:
#include <iostream>
#include <thread>
void swapno (int *a, int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
int main()
{
int x = 5, y = 7;
std::cout << "x = " << x << "\ty = " << y << "\n";
std::thread t (swapno, &x, &y);
t.join();
std::cout << "x = " << x << "\ty = " << y << "\n";
return 0;
}
你应该得到相同的结果;)