const_castをこれまで実際のコードの排出を引き起こすのか?
-
09-09-2019 - |
質問
それが真実であることをのはconst_cast の「ストップうめき声非constポインタとして扱う」コンパイラに指示するだけの方法ですか?いずれかの例がある場合、のはconst_cast の自体は、実際のマシンコードに変換される?
解決
おそらく、CONSTポインタは、コンパイラは、いくつかのコードを放出しなければならないであろうその場合、非const一つに異なる表現を持っていたアーキテクチャが存在し得ます。しかし私は、どのようなアーキテクチャを認識していないよ。
他のヒント
いいえ、それだけでコンパイル時にconst属性を削除します。
はconst_castは、単に属性と、何よりものconst性を捨てます。
const
タイプの表現を変更しない、特に、T*
の表現はT const*
と全く同じである。
考えてみます:
int i,
* const cpi = &i,
* const * pcpi = &cpi;
int const * const * pcpci = pcpi; // cpi is now int const*
を同時にcpi
の表現はint*
介しint const*
と*pcpci
を表す。
cpi
が初期化されたときに変更するpcpci
の表現のための方法はありません。
はもちろん、ポインタオブジェクトは非有意ビットを持っている場合、コンパイラがランダムに反転することができます。特に、const_cast
ポインタの非上位ビットを反転することができ、任意の暗黙の変換もできました。私は、このような場合は、現実の世界に存在しないと思います。
同じことが当てはまります。
所属していません StackOverflow