可能重复:
C ++:易失性关键字何时对您有所帮助?
我从未使用过它,但我想知道为什么人们会使用它?它到底是做什么的?我搜索了该论坛,发现只有C#或Java主题。
考虑一下这段代码,
int some_int = 100;
while(some_int == 100)
{
//your code
}
当此程序被编译,编译器优化的代码,如果它认为,该方案从来没有能做出任何试图改变的价值some_int
,所以它可能会倾向于优化while
通过更改其循环while(some_int == 100)
到的东西,相当于while(true)
使执行可能很快(因为while
循环中的条件似乎true
总是存在)。(如果编译器没有对其进行优化,则它必须some_int
在每次迭代中获取的值并将其与100进行比较,这显然有点慢。)
但是,有时(对程序的某些部分)进行优化可能是不可取的,因为可能是其他人正在some_int
从编译器不知道的程序外部更改的值,因为它看不到它。但这就是您设计的方式。在这种情况下,编译器的优化将无法产生预期的结果!
因此,为了确保获得理想的结果,您需要以某种方式停止编译器优化while
循环。这就是volatile
关键字发挥作用的地方。您需要做的就是这个,
volatile int some_int = 100; //note the 'volatile' qualifier now!
换句话说,我将对此解释如下:
volatile
告诉编译器,
“嘿,编译器,我很不稳定,而且,您甚至可以通过某些您甚至不知道的XYZ来更改我。XYZ可以是任何东西。也许是这个星球之外的某个外星人,称为程序。也许是闪电,某种形式中断,火山等可能会使我变异。也许你永远都不知道谁会改变我!所以,你一无所知,不要再扮演一个全知的神,也不敢触摸我现在所在的代码。 ?
好吧,这就是volatile
防止编译器优化代码的方式。现在在网上搜索以查看一些示例示例。
引用C ++标准(7.1.5.1/8)
[..] volatile是实现避免使用对象的优化的提示,因为对象的值可能会通过实现无法检测到的方式进行更改。[...]
相关主题:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句