将对象引用参数传递给线程函数:克服编译错误
传递对 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中文网其他相关文章!