青山です。

On Fri, 5 Nov 1999 20:35:43 +0900,
堀川 久<vzw00011 / nifty.ne.jp> wrote:

> >void foo(int obj) {
> >  int *n;
> >  n = &obj;
> >  *n = 1;
> >}
> >main() {
> >  int obj;
> >  int &n = obj;
> >  n = 0;
> >  foo(n); // n=>1
> >}
> 
>  何がしたいのか分かりませんけど。main()の最後,n = 1になりません。

あら、やはり。
ああ、なるほど。foo() の中の n = &obj (参照のアドレスを取る)は、やはり
出来ない(禁止されている)んですね。ポインタでいくと、こんな感じのつもり
でした。

void foo(int *n) {
  *n = 1;
}
main() {
  int obj;
  int *n = &obj;  /* int *n; n = &obj; */
  *n = 0;
  foo(n);         /* *n => 1 */
}

参照の値渡し。(C++ での参照を使った書き方はわかりません。というか、書
けないような気も。)

で、これが、C++ の例(参照の参照渡し)よりも、Ruby に近い。と、そういう
話でした。

void foo(int &n) {
  n = 1;
}
main() {
  int obj;
  int &n = obj;
  n = 0;
  foo(n);        // n=>1
}

おそらく、こういう意味で、参照渡しではなく、値渡しと言いたかったのです
よね?>原さん

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


-- 
青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>