「参照渡し」と「参照の値渡し」の差

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を初めて触ったとき、軽く驚きました。