В визуальной студии реализована «семантика перемещения» и «ссылка на значение»
Я наткнулся на видео на Youtube о параллелизме c ++ 11 (часть 3) и следующий код, который компилирует и генерирует правильный результат в видео.
Однако я получил ошибку компиляции этого кода с использованием Visual Studio 2012. Компилятор жалуется на тип аргументаtoSin(list<double>&&)
, Если я изменю тип аргумента наlist<double>&
Код скомпилирован.
Мой вопрос в том, что возвращаетсяmove(list)
в_tmain()
Это ссылка или просто ссылка?
#include "stdafx.h"
#include <iostream>
#include <thread>
#include <chrono>
#include <list>
#include <algorithm>
using namespace std;
void toSin(list<double>&& list)
{
//this_thread::sleep_for(chrono::seconds(1));
for_each(list.begin(), list.end(), [](double & x)
{
x = sin(x);
});
for_each(list.begin(), list.end(), [](double & x)
{
int count = static_cast<int>(10*x+10.5);
for (int i=0; i<count; ++i)
{
cout.put('*');
}
cout << endl;
});
}
int _tmain(int argc, _TCHAR* argv[])
{
list<double> list;
const double pi = 3.1415926;
const double epsilon = 0.00000001;
for (double x = 0.0; x<2*pi+epsilon; x+=pi/16)
{
list.push_back(x);
}
thread th(&toSin, /*std::ref(list)*/std::move(list));
th.join();
return 0;
}