对std::atomic<uint32_t>使用逻辑非运算符!的判断逻辑疑问
解答
你代码中!foo的实际执行逻辑如下:
- 触发
std::atomic<uint32_t>的显式bool类型转换运算符:等价于调用foo.load(std::memory_order_seq_cst) != 0,返回原子变量当前值是否非0的布尔结果 - 对上述布尔结果执行逻辑非运算,得到
!foo的最终值
补充说明
explicit operator bool()是C++11起std::atomic的标准通用成员,并非整数类型特化的重载接口,仅可在布尔测试语境(if/while条件、逻辑运算符操作数等)下被隐式调用,普通场景下不会触发隐式类型转换,这是你可能漏看该接口的主要原因。- CLion未识别到该运算符属于IDE代码索引的已知缺陷,不影响代码的标准合规性和运行逻辑。
对应你的代码场景,foo被赋值为5,bool转换的结果为true,取反后得到false,因此进入else分支,和实际运行输出一致。
内容的提问来源于stack exchange,提问作者mouse_00
相关产品推荐
相关产品推荐

