非 const 参照を `std::async` に渡すことができないのはなぜですか?それを回避するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-10-28 12:18:30
オリジナル
946 人が閲覧しました

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

参照によって 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!