首頁 > 後端開發 > C++ > 為什麼我不能將非常量參考傳遞給 `std::async` 以及如何解決它?

為什麼我不能將非常量參考傳遞給 `std::async` 以及如何解決它?

Mary-Kate Olsen
發布: 2024-10-28 12:18:30
原創
1001 人瀏覽過

Why can't I pass a non-const reference to `std::async` and how do I work around it?

透過引用傳遞給std::async 的參數中的不相容性

無法將非常量引用作為參數傳遞給std: :async 讓開發人員感到困惑。考慮以下範例:

<code class="cpp">#include <functional>
#include <future>

void foo(int& value) {}

int main() {
    int value = 23;
    std::async(foo, value);
}</code>
登入後複製

編譯器會回報此程式碼的錯誤:

error: no type named ‘type’ in ‘class std::result_of<void (*)(int)>()’
登入後複製

將參數封裝在std::reference_wrapper 中可以解決問題,但會引發有關底層的問題

基於值的參數傳遞背後的原因

std::async 的設計有意默認為按值傳遞所有參數。此選擇可確保安全,因為參數的副本不會成為懸空或表現出競爭條件。

處理非常量引用參數

但是,在某些情況下傳遞參數透過非常量引用是必要的。這就是 std::ref 發揮作用的地方。 std::ref 讓開發人員明確選擇傳遞非常量引用的危險語義,承認他們對潛在後果的理解。

以上是為什麼我不能將非常量參考傳遞給 `std::async` 以及如何解決它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板