Allow the compiler to optimize for the case where paths of execution including that statement are more or less likely than any alternative path of execution that does not include such a statement.
[[likely]] | (1) | |
[[unlikely]] | (2) |
These attributes may be applied to labels and statements (other than declaration-statements). They may not be simultaneously applied to the same label or statement.
A path of execution is deemed to include a label if and only if it contains a jump to that label:
int f(int i) { switch(i) { case 1: [[fallthrough]]; [[likely]] case 2: return 1; } return 2; }
i == 2
is considered more likely than any other value of i
, but the [[likely]]
has no effect on the i == 1
case even though it falls through the case 2:
label.
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/language/attributes/likely