这个问题涉及到C++20的
这份文档(cppreference)只提供了将它们应用于switch-case语句的示例。这个switch-case示例在我的编译器(g++-7.2)上完美编译,所以我认为编译器实现了这个特性,尽管它还未正式引入当前的C++标准。
但当我像这样使用它们:
[[likely]]
/[[unlikely]]
特性,而不是编译器定义的宏。这份文档(cppreference)只提供了将它们应用于switch-case语句的示例。这个switch-case示例在我的编译器(g++-7.2)上完美编译,所以我认为编译器实现了这个特性,尽管它还未正式引入当前的C++标准。
但当我像这样使用它们:
if (condition) [[likely]] { ... } else { ... }
,我会收到警告:
那么我应该如何在if-else语句中使用这些属性呢?"warning: attributes at the beginning of statement are ignored [-Wattributes]".
if(...) A else B
更改为if (not ...) B else A
。这将破坏流水线,导致速度变慢。以下是一个示例:https://godbolt.org/z/WcPbPv - HarryLeong