const_castは、コンパイラーに「うめき声をやめ、これを非 const ポインターとして扱う」ように伝える方法にすぎないというのは本当ですか? const_cast自体を実際のマシンコードに変換する場合はありますか?
質問する
408 次
4 に答える
12
いいえ、コンパイル時に const 属性を削除するだけです。
于 2009-04-17T07:11:59.237 に答える
5
おそらく、const ポインターが非 const ポインターとは異なる表現を持つアーキテクチャーが存在する可能性があります。その場合、コンパイラーは何らかのコードを発行する必要があります。ただし、そのようなアーキテクチャについては知りません。
于 2009-04-17T07:24:39.033 に答える
3
const_cast は、属性の constness を捨てるだけで、それ以上のものは何もありません。
于 2009-04-17T07:20:13.397 に答える
2
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
ポインターの非有意ビットを反転できますが、暗黙の変換も反転する可能性があります。このケースは現実世界には存在しないと思います。
同じことは、2 つの異なるビット パターンが同じアドレス値になる場合にも適用されます (オフセットが十分に大きい場合は、ベース + オフセット)。
于 2012-07-20T18:53:48.877 に答える