C++ 的thread不能改变引用参数的值吗
下面的程序输出结果为0,不理解为什么会这样,不应该是1吗?
void fun(int &a)
{
a =1 ;
}
int main()
{
int a =0 ;
std::thread t(fun,a) ;
t.join () ;
cout<<a<<endl ;
return 0 ;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
标准约定std::thread构造时向函数对象传递实际参数的拷贝(支持移动语义),而不是转发实际参数(你可以通过打印实际参数和形式参数的地址来检测这一行为)。即fun的形式参数是被a的拷贝初始化的,所以形式参数a并不是main函数内a的引用,在fun内赋值自然不会改变main函数内a的值。
如果你希望“以引用的方式传参”,常用解决方案之一是使用std::ref,即
std::thread(fun, std::ref(a));
。