こんにちは。

Wakou Aoyama <wakou / fsinet.or.jp>さんの
Message-Id: <199911051349.WAA28193 / hoyogw.netlab.co.jp>から
>ああ、なるほど。foo() の中の n = &obj (参照のアドレスを取る)は、やはり
>出来ない(禁止されている)んですね。ポインタでいくと、こんな感じのつもり

 rubyから離れますが。

 どうも,ポインタの知識がかえって参照の理解を妨げているような気がして
なりません。

    int& n = obj
というのは,nをobjの別名とする,と考えると分かりやすいと思います。した
がって,
    void foo(int& n) { n++; }
    int main() { int obj = 0; foo(obj); return 0; }
でのfoo()では,nがobjの別名となるので,nへの操作は当然objにも反映され
ます。これを参照渡しといいます。

    void foo(int n) { n++; }
    int main() { int obj = 0; foo(obj); return 0; }
とすると,foo()で,コピーが生成されるので,nへの操作はobjには反映され
ません。これを値渡しといいます。

>しかし、C++ の参照呼び出し(受け取り)関数は、引数が変数の場合は、その変
>数への参照を渡すものの、引数が参照の場合には、その参照の値を渡している
>のでしょうね。引数の型によって挙動が変わる、ハイブリッドタイプとも言え

    void foo(int& n) { n++; }
    int main() { int a = 0; int& b = a; foo(b); return 0; }
bはaの別名であり,nはbの別名なので,aの別名でもあります。したがってnへ
の操作はaにも反映されます。

 今後ともよろしくお願いします。

-- 
HORIKAWA Hisashi (堀川 久)
http://www2.airnet.ne.jp/pak04955/
mailto:vzw00011 / nifty.ne.jp
PGP Fingerprint: F9BE 4B60 E1DD E2D5 B969 B64F 0D6E 268D 276D F38D