参照によって std::async に渡す引数の非互換性
非 const 参照を引数として 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 の設計では、意図的にすべての引数を値で渡すようにデフォルトで設定されています。この選択により、引数のコピーがダングリングになったり、競合状態が発生したりすることがないため、安全性が確保されます。
非 Const 参照パラメータのアドレス指定
ただし、引数を渡すシナリオが存在します。非定数参照による参照が必要です。ここで std::ref が活躍します。 std::ref を使用すると、開発者は、潜在的な結果を理解した上で、非 const 参照を渡すという危険なセマンティクスを明示的に選択できます。
以上が非 const 参照を `std::async` に渡すことができないのはなぜですか?それを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。