首页 > 后端开发 > C++ > 如何将 C 标准库对象引用传递给线程而不出现编译错误?

如何将 C 标准库对象引用传递给线程而不出现编译错误?

Susan Sarandon
发布: 2024-11-20 15:29:11
原创
338 人浏览过

How to Pass C   Standard Library Object References to Threads Without Compilation Errors?

将对象引用参数传递给线程函数:克服编译错误

传递对 C 11 标准库对象的引用,例如 std::ostream ,线程函数可能会遇到编译问题。这是因为默认情况下,线程会复制其参数。

要显式传递引用,请使用 std::ref 或 std::cref 包装它以获取常量引用。下面是所提供示例的修改版本:

void foo(std::ostream &os) {
    // Do something with os
    os << "This should be printed to os" << std::endl;
}

int main() {
    std::thread t(foo, std::ref(std::cout));
    t.join(); // Wait for the thread to complete
    return 0;
}
登录后复制

通过使用 std::ref,您可以创建一个行为类似于值语义对象的引用包装器。包装器的多个副本将引用相同的底层引用,从而允许线程正确访问 std::ostream 对象。

请记住确保引用的对象在线程的整个生命周期中保持有效。

以上是如何将 C 标准库对象引用传递给线程而不出现编译错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板