最終更新日時(UTC): 2025年07月25日 10時26分24秒
yoh が更新

履歴 編集

function
<atomic>

# std::atomic_flag::コンストラクタ(C++11)

    atomic_flag() noexcept = default;         // (1) C++11
    constexpr atomic_flag() noexcept;         // (1) C++20

    atomic_flag(const atomic_flag&) = delete; // (2) C++11
    atomic_flag(atomic_flag&&) = delete;      // (3) C++11

    atomic_flag(FOR_ATOMIC_FLAG_INIT);        // (4) C++11

## 概要

- (1) : デフォルトコンストラクタ
- (2) : コピーコンストラクタ。コピー禁止
- (3) : ムーブコンストラクタ。ムーブ禁止
- (4) : `ATOMIC_FLAG_INIT`マクロでコピー初期化を行うための特別なコンストラクタ。フラグをクリアする。

## 効果

- (1) :
  - C++11 : フラグを未初期化状態にする
  - C++14 : フラグを未規定の状態にする
  - C++20 : フラグをクリア状態にする
- (4) :
  - コピー初期化形式で`ATOMIC_FLAG_INIT`マクロを使用することで、フラグがクリアされた状態となる
  - C++11 : このマクロを、静的な有効期間を持つ`atomic_flag`オブジェクトに使用した場合、その初期化は静的に行われる
  - C++14 : このマクロを、完全に静的な有効期間を持つ`atomic_flag`オブジェクトに使用した場合、その初期化は静的に行われる

## 例

    #include <iostream>
    #include <atomic>

    int main()
    {
      std::atomic_flag x = ATOMIC_FLAG_INIT;
    }

### 出力

## バージョン

### 言語

- C++11

### 処理系

- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: 2013 ✅
  - 2012はコピーコンストラクタのdeleteに対応していないため、代わりにprivateで宣言のみ行う手法で代用されている。

## 参照

- LWG Issue 2159. `atomic_flag` initialization
- P0883R2 Fixing Atomic Initialization, Rev2
- LWG Issue 3659. Consider `ATOMIC_FLAG_INIT` undeprecation