ISO / IEC 14882:2003(C ++ 03)在7.1.5.1/8中的“ cv限定词”部分中作了规定:
[注:volatile是实现的一种提示,以避免涉及对象的强烈优化,因为对象的值可能通过实现无法检测的方式进行更改。有关详细语义,请参见1.9。通常,volatile的语义在C ++中应与在C中相同。]
Nawaz的问答集Why do we use volatile keyword也已经采用了实现无法检测到的这些“方法”:
但是,有时(对程序的某些部分)进行优化可能是不可取的,因为可能是其他人从程序外部更改了some_int的值,而编译器并未意识到这一点 ,因为它看不到;但这就是您设计的方式。在这种情况下,编译器的优化将无法产生预期的结果!
但是不幸的是,他没有解释这些可能从程序外部更改对象的“方法”的含义,以及它们如何更改对象。
我的问题:
- 这些“无法检测的手段”有哪些例子?它们如何能够从程序外部更改程序的内部对象?