454. Re: C と perlで $i++したり++$i したり


番号順一覧Top スレッド順一覧Top
作者: dune
日時: 2004/8/28(23:53)
極悪です。

printf が引数のリファレンスを受け取るものとして(普通に
サブルーチンを書くと、@_ は引数のエイリアスになっている)

printf("%d%d%d\n",$i++,$i++,$i++);

と書いた場合、printf が受け取るのはインクリメントされる
前の $i の *コピー* のリファレンス(=3つの異なるオブ
ジェクトが存在している)、

printf("%d%d%d\n",++$i,++$i,++$i);

と書いた場合、printf が受け取るのはインクリメントされた
後の $i のリファレンス(= オリジナルの $i そのもの、
つまり3回インクリメントされた後の値が見える)、

と考えるとつじつまが合うかなと思ってます。とはいえ、

>この場合の評価順序って少なくともC/C++では未定義(処理系
>定義?)だったかと。

ということなら、こういう書き方をすることがそもそも間違い
で、その結果がどうなるかは言語の仕様の範囲外ってことです
ね。
-- 
極悪, FZH01112 at nifty.com
http://hpcgi1.nifty.com/dune/gwiki.pl?
前の発言: 453. Re: C と perlで $i++ したり++$i したり [Bruce.] 2004/8/28(23:19)
後の発言: 455. Re: C と perlで$i++したり++$i したり [dune] 2004/8/29(00:21)
親発言: 453. Re: C と perlで $i++ したり++$i したり [Bruce.] 2004/8/28(23:19)
子発言: 455. Re: C と perlで$i++したり++$i したり [dune] 2004/8/29(00:21)
        456. Re: C とperlで $i++したり++$iしたり [Bruce.] 2004/8/29(00:30)