1

C++ 標準によると、次のようになります。

評価 A は、次の場合に評価 B に依存します。 - A の値が B のオペランドとして使用されます。

— B は std::kill_dependency (29.3) の特殊化の呼び出し、または

— A は組み込みの論理 AND (&&、5.14 を参照) または論理 OR (||、5.15 を参照) 演算子の左オペランド、または

— A が条件 (?:、5.16 を参照) 演算子の左オペランド、または

— A は、組み込みのコンマ (,) 演算子 (5.18) の左オペランドです。(...)

関係の前に順序付けされた依存関係が kill_dependency 呼び出しで停止する理由は理解できますが、論理 AND、OR、コンマなどの演算子も依存関係チェーンを壊すのはなぜですか?

以下のコードには未定義の動作があるということですか?

//thread1
int y = 2
atomicVal.store(true);

//thread2 
auto x = atomicVal.load(std::memory_order_consume);
cout << x && y;
4

1 に答える 1