gpt4 book ai didi

c++ - 在 C++20 中增加一个 volatile 并弃用对 volatile 的操作

转载 作者:行者123 更新时间:2023-12-04 01:08:38 25 4
gpt4 key购买 nike

C++20 弃用了一些对 volatile 类型的操作(在 P1152 之后)。

以下代码,在 C++20 之前有效:

void busyLoop(std::size_t count) {
for (volatile size_t counter = 0; counter < count; ++counter);
}

现在生成弃用警告:

warning: '++' expression of 'volatile'-qualified type is deprecated [-Wvolatile]

++ 更改为 +=counter = counter + 1 没有帮助,因为问题似乎在于根据 volatile 类型计算新值。

如何调整上述代码以适应新的 C++20 规则?

最佳答案

弃用这些操作的目的是明确 volatile 变量在任何方面都不是原子的,不应期望以原子方式进行操作。因此,对于任何使用 volatileactual 代码,您需要将值读入本地,操作该本地拷贝,然后将值写回 volatile 值。

此访问模式旨在模仿委员会希望编入基于函数的接口(interface)的内容,该接口(interface)将(也许?)在某个时候完全取代 volatile。也就是说,volatile 成为您在加载和存储时访问内存地址的一种方式;它不会是对象的固有属性。


请注意 C++23将“弃用”一些对 volatile 对象的复合操作。然而,the change only applies to bitwise operators .其他复合操作仍被弃用,但尚未删除。

关于c++ - 在 C++20 中增加一个 volatile 并弃用对 volatile 的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65528802/

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