作者: Bruce.
日時: 2004/8/29(00:30)
Bruce. です。
#さっきは直し忘れてしまった。

> printf が引数のリファレンスを受け取るものとして(普通に
> サブルーチンを書くと、@_ は引数のエイリアスになっている)
> 
> printf("%d%d%d\n",$i++,$i++,$i++);
> 
> と書いた場合、printf が受け取るのはインクリメントされる
> 前の $i の *コピー* のリファレンス(=3つの異なるオブ
> ジェクトが存在している)、
> 
> printf("%d%d%d\n",++$i,++$i,++$i);
> 
> と書いた場合、printf が受け取るのはインクリメントされた
> 後の $i のリファレンス(= オリジナルの $i そのもの、
> つまり3回インクリメントされた後の値が見える)、
> 
> と考えるとつじつまが合うかなと思ってます。とはいえ、

そのようですね。リファレンス云々でちと思いついて

#include <stdio.h>
void
sub(int &a, int &b, int &c)
{
  printf("%d:%d:%d\n", a, b, c);
}

int
main()
{
   int i = 1;

   sub(++i, ++i, ++i);

   //i = 1;
   //sub(i++, i++, i++); ←これはコンパイルエラー

   return 0;
}

というC++プログラムを作ってコンパイルしたところ、

4:4:4

という出力になりました。

-- 
木村浩一
  I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
  mail kbk@...
  web  www.kt.rim.or.jp/~kbk/