gpt4 book ai didi

c++11 - 在 VS2012 中通过引用传递 std::thread c++0x

转载 作者:行者123 更新时间:2023-12-04 04:48:12 26 4
gpt4 key购买 nike

void ThreadFn(int& i)
{
cout<<"Hi from thread "<<i<<endl;
}
int x = 0;
void CreateThreads(vector<thread>& workers)
{
for(int i = 0; i< 10; i++)
{
workers.push_back(thread(&ThreadFn, x));
}
}

workers.push_back(thread(&ThreadFn, x)); 以来,我期待在线程创建 ( x ) 中出现编译错误应该通过引用。
我虽然正确的语法应该是:
workers.push_back(thread(&ThreadFn, std::ref(x)));

当然,代码编译得很好,也表现得很好。我正在使用 VC11 .知道为什么这没有被标记吗?

最佳答案

这是一个 VC11 错误,thread对象制作参数的内部副本(应该如此),但它不会将它们转发到 ThreadFn功能正常,所以会发生引用绑定(bind)到 thread对象的内部 int成员。

海合会的 std::thread曾经有类似的错误,因为我们使用了 std::bind来实现它,但我替换了 std::bind 的使用具有不同的实现细节,将捕获的参数按值转发给函数。

关于c++11 - 在 VS2012 中通过引用传递 std::thread c++0x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17858694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com