名前空間
変種
操作

属性: carries_dependency (C++11以上)

提供: 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
メモリ確保
クラス
クラス固有の関数特性
特別なメンバ関数
テンプレート
その他
 
 
属性
carries_dependency
(C++11)
(C++14)
(C++17)
(C++20)(C++20)
 

解放-消費の std::memory_order の依存連鎖が関数の内外へ伝播することを示し、コンパイラが不必要なメモリフェンス命令をスキップできるようにします。

[編集]構文

[[carries_dependency]]

[編集]説明

解放-消費の std::memory_order の依存連鎖が関数の内外へ伝播することを示し、コンパイラが不必要なメモリフェンス命令をスキップできるようにします。

この属性は以下の2つの状況で現れることができます。

1) 関数またはラムダ式の引数宣言に適用できます。 この場合、その引数の初期化がそのオブジェクトの左辺値から右辺値への変換に依存性を伝播することを示します。
2) 全体としての関数宣言に適用できます。 この場合、戻り値がその関数の呼び出し式の評価に依存性を伝播することを示します。

この属性はあらゆる翻訳単位においてその関数またはその引数の最初の宣言に現れなければなりません。 別の翻訳単位においてその関数またはその引数の最初の宣言で使用されない場合、プログラムは ill-formed です。 診断は要求されません。

使用例は std::kill_dependency を参照してください。

close