0からの、超初心者C++相談室at TECH0からの、超初心者C++相談室 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト950:デフォルトの名無しさん 24/10/29 21:15:37.83 oxmgzCly.net volatileが廃止されてatomicになったんだっけ? 951:949 24/10/29 21:19:59.00 DeRlzLOn.net この、述語部分のラムダ式で return ready; とするとコピーが発生するのでatomic的に まずい(それをコピーコンストラクタをdeleteすることで実現している)、という理解です で、ではどうしたらいいかという話に 952:デフォルトの名無しさん 24/10/29 21:25:03.73 DeRlzLOn.net うわ、名前の>>947は間違いです、>>945でした、ごめんなさい 953:デフォルトの名無しさん 24/10/29 21:37:22.02 vJbaxs/e.net 述語の戻り値型にboolを明示的に指定すればおk 954:はちみつ餃子 24/10/30 07:03:45.19 o3z0lAnP.net >>949 ラムダ式の返却値の型は省略すると return に与えた式から推論され、推論結果は参照にはならない。 つまり []{ return ready; } は []->std::atomic<bool>{ return ready; } と書いたのと同じということ。 これだと値を返すときにコピーが発生するのでコピーコンストラクタが必要 (だけど実際には無い) ということになってしまう。 解決方法としては load を呼ぶというのは妥当な方法のひとつだけど、 返却値として bool を明示する、つまり []->bool { return ready; } とするのでもよいし、 キャストを書いて [] { return static_cast<bool>(ready); } というようにするのでも良い。 見栄えからすると [] { return bool(ready); } のほうが綺麗かな? 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch