最終更新日時(UTC):
が更新

履歴 編集

function
<atomic>

std::atomic::operator--(C++11)

T operator--() volatile noexcept;             // (1) C++11
value_type operator--() volatile noexcept;    // (1) C++20

T operator--() noexcept;                      // (2) C++11
value_type operator--() noexcept;             // (2) C++20

T operator--(int) volatile noexcept;          // (3) C++11
value_type operator--(int) volatile noexcept; // (3) C++20

T operator--(int) noexcept;                   // (4) C++11
value_type operator--(int) noexcept;          // (4) C++20

概要

値をデクリメントする。

  • (1) : volatileオブジェクトに対する前置デクリメント
  • (2) : 非volatileオブジェクトに対する前置デクリメント
  • (3) : volatileオブジェクトに対する後置デクリメント
  • (4) : 非volatileオブジェクトに対する後置デクリメント

テンプレートパラメータ制約

  • (1), (3) :
    • C++20 : atomic<T>::is_always_lock_freetrueであること

戻り値

以下と等価:

例外

投げない

備考

この関数は、atomicクラスの整数型およびポインタに対する特殊化で定義される。

基本的な使い方

#include <iostream>
#include <atomic>

int main()
{
  std::atomic<int> x(3);

  --x;

  std::cout << x.load() << std::endl;
}

出力

2

複数スレッドからデクリメントする例

#include <iostream>
#include <atomic>
#include <thread>

int main()
{
  std::atomic<int> x{10};

  // 複数スレッドでデクリメントを呼んでも、
  // 最終的に全てのスレッドでのデクリメントが処理された値になる
  std::thread t1 {[&x] {
    --x;
  }};
  std::thread t2 {[&x] {
    --x;
  }};

  t1.join();
  t2.join();

  std::cout << x.load() << std::endl;
}

出力

8

バージョン

言語

  • C++11

処理系

関連項目

  • C++20 ほとんどのvolatileを非推奨化

参照