This question already has answers here:
Double Negation in C++
(14个回答)
double negation in C : is it guaranteed to return 0/1?
(2个答案)
3年前关闭。
我从Microsoft implementation of GSL(C++准则支持库)中发现了这段代码:
我阅读了有关
有问题的文件是this one。
(14个回答)
double negation in C : is it guaranteed to return 0/1?
(2个答案)
3年前关闭。
我从Microsoft implementation of GSL(C++准则支持库)中发现了这段代码:
#if defined(__clang__) || defined(__GNUC__)
#define GSL_LIKELY(x) __builtin_expect(!!(x), 1)
#define GSL_UNLIKELY(x) __builtin_expect(!!(x), 0)
#else
#define GSL_LIKELY(x) (!!(x))
#define GSL_UNLIKELY(x) (!!(x))
#endif
我阅读了有关
__builtin_expect
(here和here)的信息,但我仍然不清楚(!!(x))
中的双重 bool 求反运算符的目的是什么。为什么使用它?有问题的文件是this one。
最佳答案
__builtin_expect
具有严格的相等性,因此,双重否定的意义在于确保所有真实值都转换为1(并因此与GSL_LIKELY
中的1匹配),并且所有伪造的值均与GSL_UNLIKELY
中的0匹配。
即使无法使用__builtin_expect
保持统一性,也会保持双重否定(因为调用者可能会在if
中将返回值存储为其他用途,但作为条件)。
关于c++ - 双 bool 取反运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48840531/
10-11 23:09