Я наткнулся на этот фрагмент кода из реализации GSL (Библиотека поддержки рекомендаций C ++) от Microsoft:
#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))
. Почему это используется?
Рассматриваемый файл - этот.