这个问题是关于C++ 20的[[likely]]/[[unlikely]]功能,而不是编译器定义的宏。

本文档(cppreference)仅给出了将其应用于switch-case语句的示例。 这个切换案例可以使用我的编译器(g++-7.2)完美地编译,因此我假定编译器已经实现了此功能,尽管当前C++标准中尚未正式引入该功能。

但是当我这样使用它们时:if (condition) [[likely]] { ... } else { ... },我得到了一个警告:



那么,如何在if-else语句中使用这些属性?

最佳答案

根据Jacksonville’18 ISO C++ Report的示例,该语法是正确的,但似乎尚未实现:

if (a>b) [[likely]] {

10.6.6 Likelihood attributes [dcl.attr.likelihood] draft

10-05 22:41