我無法編譯下面的程序。爲什麼std :: move不能使用std :: list
void toSin(std::list<double>&& list)
{
std::for_each(list.begin(), list.end(), [](double& x)
{
x = sin(x);
});
}
int main()
{
std::list<double> list;
const double pi = 3.141592;
const double epsilon = 0.0000001;
for (double x = 0.0; x < 2 * pi + epsilon; x = x + pi/16)
{
list.push_back(x);
}
// Start thread
std::thread th(toSin, std::move(list));
th.join();
return 0;
}
我得到>錯誤C2664: 'void (std::list<double,std::allocator<_Ty>> &&)
':無法從 'std::list<double,std::allocator<_Ty>>
' 轉換參數1 'std::list<double,std::allocator<_Ty>> &&
'
重現I can not 。你使用的是哪個版本的視覺工作室?請注意,我在一堆丟失的標題中添加了。 – user4581301
行std :: thread th(toSin,std :: move(list));'暗示你不應該迭代超過'list',因爲它被移走了。但是你試着在下一行上迭代它。 –
Visual Studio 2013 –