什么是ATOMIC_FLAG_INIT?应如何使​​用?

时间:2019-08-19 07:10:51

标签: c++ c++17 atomic

ATOMIC_FLAG_INIT on cppreference

中的示例代码
#include <atomic>

std::atomic_flag static_flag = ATOMIC_FLAG_INIT; // static initialization,
// guaranteed to be available during dynamic initialization of static objects.

int main()
{
    std::atomic_flag automatic_flag = ATOMIC_FLAG_INIT; // guaranteed to work
//    std::atomic_flag another_flag(ATOMIC_FLAG_INIT); // unspecified
}

这是否意味着未指定依赖“零初始化”? 我们是否应该始终使用此define进行初始化?为什么呢?

1 个答案:

答案 0 :(得分:1)

  

这是否意味着未指定依赖于零初始化

您可能是说值初始化,答案是肯定的,没有明确规定,如标准http://eel.is/c++draft/atomics.flag#4.sentence-5所述。

  

我们是否应该始终使用此定义进行初始化?

是的。上面链接的句子暗示着这一点。

  

为什么?

因为标准要求它。正如this question中讨论的那样,std::atomic_flag并非用于一般用途,它是用于构建其他基元的低级基元。

对于一般用途,请使用std::atomic<bool>