Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么volatile在C++;20?_C++_Volatile_C++20 - Fatal编程技术网

C++ 为什么volatile在C++;20?

C++ 为什么volatile在C++;20?,c++,volatile,c++20,C++,Volatile,C++20,根据,在C++20中,volatile关键字的大多数用法都是不推荐的。volatile的缺点是什么?当不使用volatile时,替代方案是什么?有一个关于为什么的好话题 简而言之,volatile被删除的许多地方没有任何可理解的含义,只是造成了混乱 演讲中的一些例子: 易失性位字段应由硬件手册和/或编译器指定 +=是单指令/原子指令吗?+怎么样 比较交换需要多少读/写操作?如果失败了怎么办 void foo(int volatile n)是什么意思?或int volatile foo() 应

根据,在C++20中,
volatile
关键字的大多数用法都是不推荐的。
volatile
的缺点是什么?当不使用volatile时,替代方案是什么?

有一个关于为什么的好话题

简而言之,
volatile
被删除的许多地方没有任何可理解的含义,只是造成了混乱


演讲中的一些例子:

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

volatile的一些用法没有被弃用,因为它们很有用(例如,在直接从指定内存位置加载或存储的代码中,例如在设备驱动程序中)。相当多的“不推荐使用”与使用太多程序员错误地使用的特性作为使变量访问原子化的手段有关。C++库现在(因为C++ 11)提供了一种确保变量的原子访问的正确方法,因此在意图是原子访问时,阻止程序员错误地使用<代码>易失性< /代码>是有意义的。Peter volatile的哪些典型用法是不正确的?我似乎不知道他们是否反对volatile限定方法。以符合的方式编写“volatile correct code”是一个很好的模式。我希望他们的意图不是要打破这个模式。在他最后的讨论中,他提到他们还不会删除易变的限定成员函数,因为它们仍然有用途。我们的目标是找到一种更好的方式来描述“不稳定的正确性”试图做什么。此外,如果硬件平台需要特定用途,我相信编译器无论如何都可以将该特性实现为标准未定义的行为。不过,它的缺点是,
volatile
不适用于线程。嗯,volatile不适合用于标记多线程访问的标量(你的意思是)。正如drdobbs文章所示,它是对象级多线程编程范例的好工具。这导致了一些编译器警告,正如我刚才注意到的那样,这些警告必须被处理,而不是像我刚才所说的那样。不推荐对volatile int(例如)使用predecrement和preincrement,但对volatile进行采样(即,将其值作为非volatile返回)不会导致编译器不推荐使用警告。单线程代码中的引用计数允许在同时执行的不同算法之间重用对象。我在一家网络公司的航班搜索引擎上工作——想象一下你所想象过的最复杂的软件应用程序。。。我当然不知道在30秒钟内,在超高速C++上运行的搜索服务器会发生什么。一切都经过特别设计,以尽可能快地运转。