名前空間
変種
操作

属性: likely, unlikely (C++20以上)

提供: cppreference.com
< cpp‎ | language‎ | attributes
 
 
C++言語
一般的なトピック
フロー制御
条件付き実行文
繰り返し文 (ループ)
ジャンプ文
関数
関数宣言
ラムダ関数宣言
inline 指定子
例外指定 (C++20未満)
noexcept 指定子 (C++11)
例外
名前空間
指定子
decltype (C++11)
auto (C++11)
alignas (C++11)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点
文字 - 文字列 - nullptr (C++11)
ユーザ定義 (C++11)
ユーティリティ
属性 (C++11)
typedef 宣言
型エイリアス宣言 (C++11)
キャスト
暗黙の変換 - 明示的な変換
static_cast - dynamic_cast
const_cast - reinterpret_cast
メモリ確保
クラス
クラス固有の関数特性
特別なメンバ関数
テンプレート
その他
 
 
属性
(C++14)
(C++17)
likelyunlikely
(C++20)(C++20)
 

その文を含む実行経路がそのような文を含まないあらゆる他の実行経路よりも可能性が高いまたは低い場合に対してコンパイラが最適化できるようにします。

[編集] 構文

[[likely]] (1)
[[unlikely]] (2)

[編集] 説明

これらの属性はラベルおよび文 (宣言文を除く) に適用できます。 これらは同じラベルまたは文には同時には適用できません。

1) その文を含む実行経路がそのような文を含まないあらゆる他の実行経路よりも可能性が高い場合に対してコンパイラが最適化できるように、文に対して適用されます。
2) その文を含む実行経路がそのような文を含まないあらゆる他の実行経路よりも可能性が低い場合に対してコンパイラが最適化できるように、文に対して適用されます。

実行経路はそのラベルへのジャンプを含む場合にのみそのラベルを含むとみなされます。

int f(int i) {
    switch(i) {
    case 1: [[fallthrough]];
    [[likely]] case 2: return 1;
    }
    return 2;
}

i == 2i の他のあらゆる値よりも可能性が高いとみなされますが、たとえ case 2: ラベルにフォールスルーしていても [[likely]]i == 1 に対しては効果を持ちません。

[編集]