Java の参照と C++ の参照
Javaでは、参照型を引数として渡す時は、C++で言う参照渡しに相当する処理を行っているようだな。そうでないと、Javaの動作は説明出来ない。
2010-01-20 22:57:49@kimuraya よくある勘違いですけど違いますよ。Javaで参照型を引数として渡すときは、意味的にはC++で言うポインタ渡しに近いです。 [Gitについて話します http://bit.ly/4q96FX]
2010-01-20 22:59:18@kimuraya あと、Javaの「参照」とC++の「参照」は別物なので注意が必要です [Gitについて話します http://bit.ly/4q96FX]
2010-01-20 22:59:45Javaの参照(参照値)はアドレスに近いのに対して、C++の参照は別名のこと [Gitについて話します http://bit.ly/4q96FX]
2010-01-20 23:06:21@isoparametric 引数として、参照変数を渡した後、オブジェクトの内容を変更したり出来るため、参照渡しではないかと思いました。実際には、オブジェクトへの参照を値渡しする事で実現しているそうですね。堂々と間違いを書き込んでしまい、恥ずかしい思いです(笑
2010-01-20 23:13:26@kazoo04 ご指摘、ありがとう御座います。文献で確認したところ、Javaの場合は原則、値渡しなようです。参照変数の場合は、オブジェクトへの参照のビットパターンを値渡しでコピーして、他のクラスのメソッドで呼び出したりしているようですね。
2010-01-20 23:15:37@kikairoya C++の参照と比較して、元の変数を書き換えられない意味で、ポインタ渡しと同等という感じだと認識しやすいのかなあと。>Javaの参照の値渡し
2010-01-20 23:18:35@kazoo04 C#は値型の値渡し、参照型の値渡し、値型の参照渡し、参照型の参照渡しとあってうがー!ってなることがある。主に他人に説明する必要が発生するたびに [Gitについて話します http://bit.ly/4q96FX]
2010-01-20 23:20:09@kimuraya ああ、なるほど。そういうことですね。そういう意味では参照は渡っているので納得しました。 Javaは指しているオブジェクトの参照が値で渡されるだけですが C++の参照渡しは元の値が書き換えられる別名の意味での参照が渡っているんですよね。それで総ツッコミ、難しいw
2010-01-20 23:20:29@kimuraya C++の参照渡しは`本物の'参照渡しなので呼び出し先に「変数を」渡す。呼び出された関数が引数に値を代入すると呼び出し元の`変数の内容が'変わる。
2010-01-21 00:09:04C++で operator. がオーバーロードできれば、Javaみたいないわゆる「スマート参照」が作れるんだろうけど、operator.を許したら相当カオスになりそうな予感
2010-01-22 23:20:58