The const qualifier guarantees that the value of an object cannot be changed directly by the program. However, it may be altered asynchronously–that is, by a way unknown to the compiler. For example, the current bit rate of a modem can be read directly from its port and stored in a const variable. However, it can have different values during the execution of the program, due to the varying line conditions. The compiler can mistakenly assume that the value is immutable and store it in a machine register as an optimization measure, rather than read it from the modem’s port. The volatile qualifier instructs the compiler to read the value of the variable from its source (in this case, the modem port) every time it is accessed, instead of storing it in a faster processor register. The generated code may be less efficient in this case, but it is correct.