「参照渡し」と「参照の値渡し」の差
via ときどきの雑記帖さん。
C++とJavaの参照は参照でも意味(扱い)が違うのではまりますよね、と。
call by reference と call by value を (なにがしかの)値を書き換えられるかどうかだと覚えているとはまりますよね。 と。
404 Not Found
で、再確認の意味で自分でも。
class A { private: int value_; public: A(int value) : value_(value){} void getValue(int& value) { value = value_; } }; A* pa = new A(10); int c = 100; pa->getValue(c); // c が書き換わる! printf("[%d]",c); delete pa;
出力が[100]ではなく、
[10]
となるのが参照渡し。
もちろん、
int& getValue() { return value_; }
なら、
int& b = pa->getValue(); b = 10;
参照で受けると中身(value_)を書き換えられる。
(不用意に使うとまるでカプセル化の意味がありません)
Javaは「参照を値渡ししているだけ」なので、
void getValue(Integer value){
value = value_;
}
は何も起きないのは両方使っている人はご承知の通りですねん。
これに関してJavaを初めて触ったとき、軽く驚きました。