分類:[C/C++]
はじめまして、C++を勉強しはじめて間もない初心者です。
開発環境は、Windows XP SP3、Visual Studio C++ Express Edition、言語はC++(バージョンは分かりません)
タイトルの通り、constの付いた変数をreinterpret_castして型を変えるときの処理について質問です。
以下、私の認識です。
reinterpret_castはポインタ型の型変換するときに使うキャスト演算子で、このキャストではconst修飾子ははずせない。
const修飾子は、定数を表現するための修飾子で、これを付けると、変数の値(データ)が書き換えられない。
ということなので、キャストされる型とキャストされた型の両方にconst修飾子が付いている場合、
reinterpret_castは行う事ができて、型のみ変更される。
コードで書いてみると
const int* data1;
const char* data2 = reinterpret_cast<const char*>(data1);
このような感じになると思います。
変換されたdata2はchar型のポインタなので、アドレス値を4バイト(私の環境では)で持っているため、
これはint型のポインタのバイト数と同じなので、値の変更(ポインタの指すアドレス値の変更)は起きない。
という認識なのですが、実際ポインタの型とは、そのアドレス値にあるデータの型なので、
ポインタの型が変更されると、そのアドレス値にあるデータの型が変わってしまうような気がしています。
そして、その場合、int型からchar型になることによって、4バイトから1バイトになるため、
必然的にデータが変わってしまうのではないでしょうか?
ポインタや型について、あまりよく理解できてないので、うまく説明できてませんが、
3時間以上悩んで。。。どうしてもわからないので質問させていただきました。
よろしくお願いいたします。
|