はconst_cast
、オブジェクトが であるという事実を無視するためにも使用できますvolatile
。しかし、これは実際にはどういう意味ですか?? 変数const_cast
に aを使用する例が思いつきませんか??volatile
2 に答える
volatile
変数がなどであるという事実を決してconst
無視しないでください。
これを行うと、Undefined Behaviorが発生します。
ただし、許可されるのは、キャストしたオブジェクトが実際には修飾されていないとconst_cast
コンパイラーに想定させることです。ポインター/参照がそう言っている場合でも。
コンパイラに嘘をついた場合のペナルティは、いつものように UB です。
一般的な例は、修飾されたメンバー関数と修飾されていないメンバー関数の両方を持つクラスを定義して、const/volatile-correctess を有効にすることです。修飾されていないバージョンは、すべての作業を行う修飾されたバージョンのインライン ラッパーです。
volatile
ただし、低レベルのドライバー/マイクロコントローラーコード以外では非常にまれです。
変数が volatile (または実際には const) と宣言されている場合、それconst_cast
を削除するために使用することは未定義の動作であり、非常に悪い考えです。
しかし、実際にはそうではないことがわかっているものへの volatile (または const) 参照が与えられることがあります。const_cast
その場合、元に戻すために使用することは正当であり、場合によっては有用です。
const で時々これを実行しましたが、volatile で実行したことは思い出せません。とにかく揮発性を使用することはめったにありません。