c++ - 在 C++20 中增加一个 volatile 并弃用对 volatile 的操作
问题描述
volatile
C++20 弃用了对类型的某些特定操作(在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]
更改++
to+=
或 tocounter = counter + 1
没有帮助,因为问题似乎在于基于 volatile 类型计算新值。
如何将上述代码调整为新的 C++20 规则?
解决方案
弃用这些操作的目的是要明确volatile
变量不是原子的,也不应该期望被原子地操作。因此,对于任何使用 的实际代码volatile
,您需要将值读入本地,操作该本地副本,然后将值写回该volatile
值。
这种访问模式旨在模仿委员会希望将其编入基于函数的接口,该接口将(也许?)volatile
在某个时候完全取代。也就是说,volatile
成为您在加载和存储时访问内存地址的一种方式;它不会是对象的内在属性。
推荐阅读
- clojure - Clojure - 在地图上使用记录有什么好处
- html - Bootstrap 水平对齐问题
- r - 仅在加载正确的文件时出现条件面板
- node.js - 将 DynamoDB TTL 设置为未来 2 周
- julia - 如何在 Julia 中传递 struct 的字段,然后对其进行变异而不是分配它?
- r - 如何按具有所有因素水平的受试者进行过滤?
- flutter - 颤动的新Web项目未在Android模拟器中显示
- python - OpenCV 需要 Android SDK 工具版本 14 或更新版本
- python - Pandas:根据不同数据帧的多列中的匹配值在一个数据帧中创建一列
- linux - 如何运行心跳功能