將物件引用參數傳遞給執行緒函數:克服編譯錯誤
傳遞對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中文網其他相關文章!