根据 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;