2010年8月27日

[PHP-users 35358] Re:演算子の評価順位

くわむらです


2010/8/27 Mori Yojiro <yojiro-m@xxxxx>:
> On Wed, 25 Aug 2010 18:43:20 +0900
> Shindo <shindo@xxxxx> wrote:
>
>> $ php -r '$a = 1; echo ($a + 0 + $a--) . "\n";'

>> 2
>> $ php -r '$a = 1; echo ($a + $a-- + 0) . "\n";'
>> 1
> 演算子の優先順位が同じ場合の評価順序って定義されていましたっけ?
> C言語の場合で関数の引数の評価順序は処理系依存だったように思いましたので。
> a=1; func(++a, ++a);

やはり処理系依存の問題なのですか。
さっき、メールを送ってからはたと気がついたのですが、

> -- 演算子は結合しないで、+ 演算子よりも優先されるとすると、
> $a=1; echo ($a + 0 + $a--) ;
> は、
> echo (1 + 0 + 0);
> となるべきと思います。
>
> # あれ、perlも同じ結果になるなあ。。。

--$a ではなく $a-- は後評価なので上記ではなく、
進藤さんの書かれてた、

> 1)最初に左の$aが評価されて、次に+演算が
> (1 + $a-- +0)
> 2)次に右側の$aが評価されて、その後、$aはデクリメントされ
> (1 + 1 + 0)
> 3)式の評価として次の+演算が評価され
> 2
> が素直かなと

のほうが矛盾がないとも思いました。
gccの処理ではそうなりました。

--
% cat >test.c<<EOF
#include "stdio.h"
main (){
int a, b;
a = 1; b = (a + a-- + 0); printf ("%d, %d\n",b, a);
}
EOF
% cc test.c
% ./a.out
2, 0

% perl -e '$a = 1; $b = ($a + $a-- + 0); print "$b, $a" ."\n";'
1, 0

% php -r '$a = 1; $b = ($a + $a-- + 0); echo "$b, $a" ."\n";'
1, 0
--

いずれにしろ、どちらかに統一されていないと
うっかり使えないですね。
(python, ruby では --a のような前置の演算子
だけで、a-- のようなのはかったと思います。)


--
Jun Kuwamura
rC Cn
^
~
_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2010年8月27日 17:06
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/97967
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。