鍍金池/ 問答/Java  C  C++  Linux/ C++ 的thread不能改變引用參數(shù)的值嗎

C++ 的thread不能改變引用參數(shù)的值嗎

下面的程序輸出結果為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 ;
}
回答
編輯回答
維他命

標準約定std::thread構造時向函數(shù)對象傳遞實際參數(shù)的拷貝(支持移動語義),而不是轉發(fā)實際參數(shù)(你可以通過打印實際參數(shù)和形式參數(shù)的地址來檢測這一行為)。即fun的形式參數(shù)是被a的拷貝初始化的,所以形式參數(shù)a并不是main函數(shù)內a的引用,在fun內賦值自然不會改變main函數(shù)內a的值。

如果你希望“以引用的方式傳參”,常用解決方案之一是使用std::ref,即std::thread(fun, std::ref(a));。

2018年8月15日 17:05
編輯回答
拮據
int main()
{
    int a = 0;
    thread t([&]() {
        a = 1;
    });
    t.join();
    cout << a << endl;
    return 0;
}
2017年4月17日 23:44