最終更新日時(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
constexpr value_type operator--() noexcept;    // (2) C++26

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
constexpr value_type operator--(int) noexcept; // (4) C++26

概要

値をデクリメントする。

  • (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

処理系

関連項目

参照