使用否定运算符! std::atomic<uint_32>
Using negation operator ! with std::atomic<uint_32>
我有一段代码:
#include <atomic>
#include <cstdint>
int main()
{
std::atomic<uint32_t> foo;
foo = 5;
std::cout << foo.load() << std::endl;
if (!foo) // what is checked here????????????
{
std::cout << "!foo == TRUE\n";
}
else
{
std::cout << "!foo == FALSE\n";
}
return 0;
}
// Output :
// 5
// !foo == FALSE
std::atomic
的 cppreference 上没有 bool
运算符,CLion 没有将其显示为运算符。在 if
-condition?
中检查了什么?
它试图做的是将其转换为布尔值,以便它可以确定哪个块要 运行。
因为 5 是一个 'truthy' 值,所以它将它转换为 true
,然后取反为 false
。另一方面,0 是一个 'falsy' 值,因此它变为 false
否定为 true
。
我有一段代码:
#include <atomic>
#include <cstdint>
int main()
{
std::atomic<uint32_t> foo;
foo = 5;
std::cout << foo.load() << std::endl;
if (!foo) // what is checked here????????????
{
std::cout << "!foo == TRUE\n";
}
else
{
std::cout << "!foo == FALSE\n";
}
return 0;
}
// Output :
// 5
// !foo == FALSE
std::atomic
的 cppreference 上没有 bool
运算符,CLion 没有将其显示为运算符。在 if
-condition?
它试图做的是将其转换为布尔值,以便它可以确定哪个块要 运行。
因为 5 是一个 'truthy' 值,所以它将它转换为 true
,然后取反为 false
。另一方面,0 是一个 'falsy' 值,因此它变为 false
否定为 true
。