您能否举一个简单或真实的示例来演示 volatile 拷贝构造函数的用法?
我只是想不出一个。
最佳答案
正如@Nawaz已经指出的那样:
使用volatile关键字的主要原因通常是禁用优化。那就是如果你有这样的事情:
bool flag = false;
if(!flag) {}
编译器会看到无法更改标志,因此无需每次都检查标志-因此不会。但是,如果您将标志变量设置为volatile-将会。这是关于volatile关键字原始用途的一种意见:link
简而言之,它最初用于通过MMIO访问硬件,这可能有点不寻常:
unsigned char* pControl = 0xff24 ;
*pControl = 0 ;
*pControl = 0 ;
*pControl = 0 ;
而且您不希望由于优化而使这3个分配成为一个分配。这是Andrei Alexandrescu撰写的有关多线程软件中的volatile的论文:link
有一些论文批评亚历山大·亚历山大(Alexandrescu)的论文,但我找不到它。关键是他正在抛弃不稳定的属性(property),依此类推。
请注意@JanHudec指出的关于多线程的非常重要的事情: