2

const_cast、オブジェクトが であるという事実を無視するためにも使用できますvolatile。しかし、これは実際にはどういう意味ですか?? 変数const_castに aを使用する例が思いつきませんか??volatile

4

2 に答える 2

2

volatile変数がなどであるという事実を決してconst無視しないでください。

これを行うと、Undefined Behaviorが発生します。

ただし、許可されるのは、キャストしたオブジェクトが実際には修飾されていないconst_castコンパイラーに想定させることです。ポインター/参照がそう言っている場合でも。 コンパイラに嘘をついた場合のペナルティは、いつものように UB です。

一般的な例は、修飾されたメンバー関数と修飾されていないメンバー関数の両方を持つクラスを定義して、const/volatile-correctess を有効にすることです。修飾されていないバージョンは、すべての作業を行う修飾されたバージョンのインライン ラッパーです。

volatileただし、低レベルのドライバー/マイクロコントローラーコード以外では非常にまれです。

于 2014-08-09T18:47:19.467 に答える
0

変数が volatile (または実際には const) と宣言されている場合、それconst_castを削除するために使用することは未定義の動作であり、非常に悪い考えです。

しかし、実際にはそうではないことがわかっているものへの volatile (または const) 参照が与えられることがあります。const_castその場合、元に戻すために使用することは正当であり、場合によっては有用です。

const で時々これを実行しましたが、volatile で実行したことは思い出せません。とにかく揮発性を使用することはめったにありません。

于 2014-08-09T18:53:28.257 に答える