1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
#include <iostream>
#include <thread>
using namespace std;
struct NoMove
{
NoMove() = default;
NoMove(NoMove &&tmp) = delete;
};
struct MoveOK
{
int d_value = 10;
MoveOK() = default;
MoveOK(MoveOK const &) = default;
MoveOK(MoveOK &&tmp)
{
d_value = 0;
cout << "MoveOK move cons.\n";
}
};
void valueArg(int value)
{}
void refArg(int &ref)
{}
void r_refArg(int &&tmp)
{
tmp = 100;
}
void r_refNoMove(NoMove &&tmp)
{}
void r_refMoveOK(MoveOK &&tmp)
{}
int main()
{
int value = 0;
std::thread(valueArg, value).join();
std::thread(refArg, ref(value)).join();
std::thread(r_refArg, move(value)).join();
// std::thread(refArg, value);
std::thread(r_refArg, value).join();
cout << "value after r_refArg: " << value << '\n';
// std::thread(r_refNoMove, NoMove());
NoMove noMove;
// std::thread(r_refNoMove, noMove).join();
MoveOK moveOK;
std::thread(r_refMoveOK, moveOK).join();
cout << moveOK.d_value << '\n';
}
|