[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: ポインターと参照




> > C++ の参照の場合、一度初期化したらずっと同じ領域を指し続けます。
> 
>  「一度初期化したら、再設定しない限り、ずっと同じ領域を指し続けます」
> ですよね。

「再設定」という言葉が何を意味するのかによりますが、最初の遠藤さんの
説明の方がより的確ではないでしょうか。

C++の参照変数の場合、

・参照変数は生成時に必ず初期化が必要である(しなければコンパイルエラー)

・参照変数は、生成されてから破棄されるまで、同じ領域を指しつづけ、
  途中で参照先を変えることはできない。(代入は参照先オブジェクトへ
  の代入として処理される)

です。

C++とJavaでは概念が異なるのに「参照」という同じ用語が使われているので
混乱してしまいますが、「オブジェクトを参照する変数」ぐらいに捉えておき、
そのこまごまとした制約は言語毎に異なると考えておけば良いと思います。

Javaの参照変数を、C/C++言語から理解しようとすると

「C言語の構造体へのポインタ変数から、ポインタ加減演算・添え字付け演算
  を除き、メンバアクセスを -> の代わりに . で表記可能な変数である。」

または

「C++言語のクラスインスタンスへの参照変数に、初期値無しの生成、
  代入による参照先の変更、nullの代入を許し、参照変数そのものを式と
  して評価したときに(参照先のインスタンス全体ではなく)、参照先への
  ポインタ値を返すものである」

となると思います。