将非常量引用传递给线程 《C++程序设计语言第四版》中的P>由“Bjarne Stroustrup”,5.3.2。传递参数时,有一个代码段: void f(vector<double>& v); // function do something with v int main() { vector<double> some_vec {1,2,3,4,5,6,7,8,9}; thread t1 {f,some_vec}; } void f(vector&v);//用v做某事 int main() { 向量some_vec{1,2,3,4,5,6,7,8,9}; 线程t1{f,some_vec}; }

将非常量引用传递给线程 《C++程序设计语言第四版》中的P>由“Bjarne Stroustrup”,5.3.2。传递参数时,有一个代码段: void f(vector<double>& v); // function do something with v int main() { vector<double> some_vec {1,2,3,4,5,6,7,8,9}; thread t1 {f,some_vec}; } void f(vector&v);//用v做某事 int main() { 向量some_vec{1,2,3,4,5,6,7,8,9}; 线程t1{f,some_vec}; },c++,multithreading,C++,Multithreading,第一行中f的声明没有常量参数。当我尝试以下类似代码时: void f(string& str) { cout << str << endl; } int main() { string fstr="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"; thread t1 {f,fstr}; } void f(string&str){cout刚刚看了一下这里: 他们说你应该使用

第一行中f的声明没有常量参数。当我尝试以下类似代码时:

void f(string& str) { cout << str << endl; }

int main()
{
    string fstr="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
    thread t1 {f,fstr};
}
void f(string&str){cout刚刚看了一下这里:

他们说你应该使用
std::ref
传递一些东西作为参考

因此,在您的情况下,请尝试以下方法:

thread t1 {f, std::ref(fstr)};

相关:第一个代码示例是否为您工作?您不清楚您是问为什么一个工作,而另一个不。谢谢,我尝试STD::RF并发现它是有效的。谢谢,这是有效的,但是这是否意味着来自“Bjarne Stroustrup C++编程语言第四版”的代码?不正确吗?@shengyushen你试过了吗?你的问题暗示它有效。是吗?我刚试过,发现书中的例子也失败了,同样的信息。很有趣。但我不明白的是,为什么非常量方式被禁止?通过引用,线程似乎只接受值而不是ref?对吗?这是不是意味着避免da比赛?
thread t1 {f, std::ref(fstr)};