首頁  >  文章  >  後端開發  >  如何將 C 標準函式庫物件引用傳遞給執行緒而不出現編譯錯誤?

如何將 C 標準函式庫物件引用傳遞給執行緒而不出現編譯錯誤?

Susan Sarandon
Susan Sarandon原創
2024-11-20 15:29:11295瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn