gpt4 book ai didi

c++ - 为什么 std::atomic 的默认构造函数不默认初始化底层存储值?

转载 作者:行者123 更新时间:2023-12-05 00:44:55 25 4
gpt4 key购买 nike

由于今天是美国的感恩节,我将成为提出这个问题的指定火鸡:

采取这样无害的事情。具有简单普通旧数据类型(例如 int)的原子:

atomic<int> x;
cout << x;

以上将打印出垃圾(未定义)数据。考虑到我为 atomic constuctor 阅读的内容,这是有道理的:

(1) default constructor

Leaves the atomic object in an uninitialized state. An uninitialized atomic object may later be initialized by calling atomic_init.



感觉像是一个奇怪的委员会决定。但我相信他们有他们的理由。但我想不出另一个 std::默认构造函数将使对象处于未定义状态的类。

我可以看到将更复杂的类型与 std::atomic 一起使用会有什么意义。没有默认构造函数并且需要去 atomic_init小路。但更一般的情况是使用具有简单类型的原子来处理引用计数、顺序标识符值和简单的基于轮询的锁定等场景。因此,这些类型没有自己的存储值“零初始化”(默认初始化)感觉很奇怪。或者至少,如果不可预测,为什么要使用默认构造函数。

未初始化 std::atomic 的原因是什么?实例会很有用。

最佳答案

mentioned in P0883 ,这种行为的主要原因是与 C 兼容。显然 C 没有值初始化的概念; atomic_int i;不执行初始化。为了与 C 兼容,C++ 等效项也必须不执行初始化。从 atomic_int在 C++ 中应该是 std::atomic<int> 的别名,然后为了完全 C/C++ 兼容性,该类型也必须不执行初始化。

幸运的是,C++20 looks to be undoing this behavior .

关于c++ - 为什么 std::atomic 的默认构造函数不默认初始化底层存储值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59099401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com