为什么在 C++20 中弃用易失性?



根据cpp首选项,volatile关键字的大多数用法将在C++20中弃用。volatile的缺点是什么?不使用volatile时的替代解决方案是什么?

C++委员会语言进化主席就原因进行了很好的演讲。

简要总结一下,volatile被移除的地方在标准中没有任何明确定义的含义,只是引起了混乱。


激励(模棱两可(的例子

  • 易失性位字段应由硬件手册和/或编译器指定。
  • +=是单/原子指令吗?++怎么样?
  • compare_exchange需要多少次读/写? 如果失败了怎么办?
  • void foo(int volatile n)是什么意思? 还是int volatile foo()
  • *vp;应该做负载吗?(这在标准中已更改两次。
<小时 />

线程

从历史上看,人们使用volatile来实现 C 和 C++ 中的线程安全。 在 C++11 中,添加了在线程之间创建同步和共享状态的非 UB 方法。 我推荐"返璞归真:并发"作为很好的介绍。

最新更新