それができることはわかったが、その趣旨がよくわからない。
2 に答える
const
変数について同じ考えを参照しているようにvolatile
聞こえますが、そうではありません。現在のconst
コードでは変数を変更できません。volatile
変数は、現在のコードの外にある外部エンティティによって変更される場合があります。const volatile
プログラムが予測できないときにコンピューターによって変更される変数 (特にメモリ マップト レジスタのようなもの)を持つことができますが、コードを直接変更することはできません。または("cv-qualification") を変数const_cast
に追加または削除するために使用できます。const
volatile
const
とvolatile
は直交しています。
const
データが読み取り専用であることを意味します。
volatile
変数が外部の理由により変更される可能性があることを意味するため、コンパイラは変数が参照されるたびにメモリから変数を読み取る必要があります。
そのため、削除const
すると、読み取り専用の場所であった場所を書き込むことができます (コードには、その場所が実際に変更可能であるという特別な知識が必要です)。未定義の動作を引き起こす可能性があるため、削除volatile
して書き込むべきではありません (7.1.5.1/7 のためIf an attempt is made to refer to an object defined with a volatile-qualified type through the use of an lvalue
with a non-volatile-qualified type, the program behaviour is undefined.
) 。