C++ 属性: likely, unlikely (C++20 起)
来自cppreference.com
< cpp | language | attributes
允许编译器为包含该语句的执行路径,比任何其他不包含该语句的执行路径,更可能或更不可能的情况进行优化。
语法
[[likely]]
|
(1) | ||||||||
[[unlikely]]
|
(2) | ||||||||
解释
这些属性可应用于标号或语句(除了声明语句)。它们不可同时应用到同一标号或语句。
1) 应用到语句,允许编译器为包含该语句的执行路径,比任何其他不包含该语句的执行路径更可能的情况进行优化。
2) 应用到语句,允许编译器为包含该语句的执行路径,比任何其他不包含该语句的执行路径更不可能的情况进行优化。
当且仅当执行路径中含有到某个标号的跳转时,才认为该执行路径包含该标号:
int f(int i) { switch(i) { case 1: [[fallthrough]]; [[likely]] case 2: return 1; } return 2; }
i == 2 被认为比 i
的任何其他值更可能,但 [[likely]]
在 i == 1 的情况无效果,尽管它直落到 case 2: 标号。