8

const_castは、コンパイラーに「うめき声をやめ、これを非 const ポインターとして扱う」ように伝える方法にすぎないというのは本当ですか? const_cast自体を実際のマシンコードに変換する場合はありますか?

4

4 に答える 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 に答える