C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: const付き変数のreinterpret_castについて


(過去ログ 87 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■51765 / inTopicNo.1)  const付き変数のreinterpret_castについて
  
□投稿者/ たんぽぽ (1回)-(2010/07/17(Sat) 02:48:56)

分類:[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時間以上悩んで。。。どうしてもわからないので質問させていただきました。
よろしくお願いいたします。




引用返信 編集キー/
■51766 / inTopicNo.2)  Re[1]: const付き変数のreinterpret_castについて
□投稿者/ επιστημη (2536回)-(2010/07/17(Sat) 07:25:58)
επιστημη さんの Web サイト
そして、その場合、int型からchar型になることによって、4バイトから1バイトになるため、
> 必然的にデータが変わってしまうのではないでしょうか?

ですね。しかしcastした対象であるポインタの値は変わっていません。

引用返信 編集キー/
■51767 / inTopicNo.3)  Re[2]: const付き変数のreinterpret_castについて
□投稿者/ 774RR (521回)-(2010/07/17(Sat) 07:36:26)
もうひとついえば *data1 の値は変わっていないけど *data2 の値は変わっているわけだよ
引用返信 編集キー/
■51768 / inTopicNo.4)  Re[3]: const付き変数のreinterpret_castについて
□投稿者/ たんぽぽ (2回)-(2010/07/17(Sat) 15:17:08)
επιστημηさん、 774RRさん。
ご解答ありがとうございました。

constが付いているので元の変数の値は変わらないということですよね。
いろいろと考え過ぎて、基本的なことの解釈ができてなかったようです。。。><;

そして、キャストされた型の値が変わっているというのも、
「int型からchar型に変更することによって、4バイトの値に、1バイトづつアクセスできるようになる。」
(本来はこれを実現するための処理)ということで、理解できました。

また何か分からないことがあれば、質問させていただきたいと思います。
そのときは、よろしくお願い致します。ありがとうございました!




解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -