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

履歴 編集

macro
<atomic>

ATOMIC_VAR_INIT(C++11)(C++20で非推奨)

# define ATOMIC_VAR_INIT(value) see below

この機能はC++20で非推奨となった。std::atomicクラスのデフォルトコンストラクタが値初期化するようになったため、初期化のためにこの機能を使用する必要はない。

概要

アトミック変数の初期化

効果

このマクロは、静的ストレージを持つアトミック変数をvalueで初期化するためのトークン列へと展開される(この操作はロックの初期化を必要とするかもしれない)。変数の初期化中に並行アクセスされた場合、それがアトミックな操作であったとしてもデータ競合を引き起こす。

備考

このマクロは、atomicオブジェクトに対してはatomic<int> x(value);と書くのと等価である。C言語との互換性のために存在している。

非推奨の詳細 (C++20)

C言語との互換性のために、std::atomicクラスのデフォルトコンストラクタはトリビアルに定義され、初期値は未規定となっていた。そのためこの機能を介してstd::atomicオブジェクトを初期化する必要があったが、C++20からデフォルトコンストラクタが値初期化を行うようになったため、初期化のためにこの機能を使用する必要はなくなった。

#include <iostream>
#include <atomic>

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

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

出力

3

バージョン

言語

  • C++11

処理系

実装例

# define ATOMIC_VAR_INIT(value) { value }

参照