透過引用傳遞給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中文網其他相關文章!