Hatena::ブログ(Diary)

mooz deceives you

(about 'mooz) ; => "See http://mooz.github.com/index-ja.html"

 | 

August 12 (Sun), 2007

引数として関数を渡したときの実行順序

  s.push('a');
  s.push('b');
  s.push('c');
  s.push('d');
  std::cout << s.pop() << s.pop() << s.pop() << s.pop() << '\n';

このようにしてスタックにabcdを入れてから、標準出力に引数を渡す。結果は

abcd

となるので、後ろの方から順に引数が呼ばれていることが分かる。d->c->b->aといった感じ。printfを使うともっと分かりやすい。

  printf("%c\n%c\n%c\n%c\n", s.pop(), s.pop(), s.pop(), s.pop());

とすれば結果は

a
b
c
d

となる。

printf("%c\n", s.pop());
printf("%c\n", s.pop());
printf("%c\n", s.pop());
printf("%c\n", s.pop());

とすると今度は

d
c
b
a

となる。

追記

ココで指摘されたのですが、実際の挙動は未定義なので処理系依存とのことです。一つ勉強になりました。ちなみに上の結果はg++4.1によるもの。

トラックバック - http://d.hatena.ne.jp/mooz/20070812/p1
 | 
Connection: close