根据CPP参考: volatile object-类型为volatile-qualified的对象,或volatile对象的子对象,或const-volatile对象的可变子对象。为了优化的目的,通过volatile-qualified类型的glvalue表达式进行的每个访问(读或写操作、成员函数调用等)都被视为可见的side-effect(也就是说,在一个thread的执行过程中,不稳定的访问不能被优化出来或用另一个可见的副作用sequenced-before或sequenced-after来重新排序不稳定的访问。这使得volatile对象适合与信号处理程序通信,而不是与另一个执行的thread通信,请参见std::memory_order)。任何试图通过non-volatileglvalue(例如通过non-volatile类型的引用或指针)引用volatile对象都会导致未定义的行为。 这解释了为什么编译器不能进行某些优化,因为它不能完全预测它的值何时在compile-time处被修改。此限定符用于向编译器指示它不应执行这些优化,因为它的值可以以编译器未知的方式更改。 我最近没有使用微控制器,但是我认为不同的电输入和输出引脚的状态必须标记为volatile,因为编译器不知道它们可以从外部改变。(在本例中,使用的方法不是像plug-in组件那样的代码)。