У меня возникла еще одна проблема с std::thread
& на этот раз при применении std::move
для обмена 2 значениями. Мой код говорит: -using std :: move in std :: thread
#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'. – Jerome
Причины такие же, как и в предыдущем вопросе. Также используйте 'std :: swap'. – juanchopanza
как вы перешли от "[вы должны обернуть его в std :: ref] (http://stackoverflow.com/a/33895159)" для использования &&? – Default