C++ 什么是原子标志?它应该如何使用?

C++ 什么是原子标志?它应该如何使用?,c++,c++17,atomic,C++,C++17,Atomic,示例代码来自 #包括 std::atomic_flag static_flag=atomic_flag_INIT;//静态初始化, //保证在静态对象的动态初始化期间可用。 int main() { std::atomic_flag automatic_flag=atomic_flag_INIT;//保证工作 //std::atomic_flag另一个_flag(atomic_flag_INIT);//未指定 } 这是否意味着依赖于例如“零初始化”是未指定的? 我们是否应该始终使用此定义进行初

示例代码来自

#包括
std::atomic_flag static_flag=atomic_flag_INIT;//静态初始化,
//保证在静态对象的动态初始化期间可用。
int main()
{
std::atomic_flag automatic_flag=atomic_flag_INIT;//保证工作
//std::atomic_flag另一个_flag(atomic_flag_INIT);//未指定
}
这是否意味着依赖于例如“零初始化”是未指定的? 我们是否应该始终使用此定义进行初始化?为什么?

这是否意味着依赖于零初始化(例如)是未指定的

您可能指的是值初始化,答案是肯定的,未指定,如标准中所述:

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

对。上面链接的句子暗示着

为什么?

因为标准要求它。正如中所讨论的,
std::atomic_flag
不是通用的,它是用于构建其他原语的低级原语


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

你看过你链接的那页了吗?它就在那里:在任何其他初始化之后保留的值都是未指定的。《标准》中的同样声明:。@DanielLangr我确实读过它-这就是我问这个问题的原因:。@DanielLangr谢谢你,这个问题是关于同一个主题的-但OP那里只是测试错误-不是这里的问题。这几乎回答了我的问题。然而,“因为标准要求它”并不是一个令人满意的解释。但也许这应该在另一个问题中提出。@daurune这里已经有人问过了:。事实上,这使你的问题重复,所以我建议删除这个问题。
#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
}