我发现了一段代码,来自于微软的GSL实现(C++指南支持库):
我了解到
涉及的文件是这个文件。
Microsoft implementation of GSL
#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
的相关信息(在这里和这里),但是我仍然不清楚在(!!(x))
中为什么要使用双重布尔否定运算符。它的目的是什么?涉及的文件是这个文件。