如下程序的输出为0,不应该是1吗?为什么。如果改成指针的话输出是1.
void fun(int &a)
{
a =1 ;
}
int main()
{
int a =0 ;
std::thread t(fun,a) ;
t.join () ;
cout<<a<<endl ;
return 0 ;
}
需要强制指定传递引用
std::thread t3(fun, std::ref(a)); // pass by reference
如楼上所言。
系统默认应该采用拷贝。
std::thread t(fun,a);
因为这里的a不是传递的引用,而是值,而fun是thread调用的,所以修改的是thread内的某个变量(它调用前从a拷贝了一份值),不会作用到a。
这里涉及到的是值传递和引用传递,你传递过去的是一个值,不会影响原变量的值,你得特定声明一下。
std::thread 拷贝构造函数将a拷贝给thread对象的一个内部成员了
std::thread t(fun,a);
因为这里的a不是传递的引用,而是值,而fun是thread调用的,所以修改的是thread内的某个变量(它调用前从a拷贝了一份值),不会作用到a。