J'ai rencontré encore un autre problème avec std::thread
& cette fois tout en appliquant std::move
pour échanger 2 valeurs. Mon code dit: -en utilisant std :: move dans 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;
}
Sortie: -
x = 5 y = 7
x = 5 y = 7
Maintenant, ce qui ne va pas dans cette méthode? Pourquoi un tel code montre-t-il un tel comportement? Comment puis-je le corriger?
Le thread utilise une copie de 'x' et' y' qui ne lui sont pas réf. Vous pouvez passer le pointeur à 'x' et' y' à la place. – Jerome
Les raisons sont les mêmes que pour votre question précédente. En outre, utilisez 'std :: swap'. – juanchopanza
comment êtes-vous passé de "[vous devez envelopper dans un std :: ref] (http://stackoverflow.com/a/33895159)" pour utiliser &&? – Default