• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:参照渡しの間違ったコードの謎?)

参照渡しの間違ったコードの謎?

このQ&Aのポイント
  • C++初心者が参照渡しの間違ったコードを書いてしまいました。
  • コードの結果を見ると、2行目の参照渡しの仮引数が意図しない値であることがわかります。
  • 間違った処理が行われ、結果が予測と異なるため、解説を求めています。

質問者が選んだベストアンサー

  • ベストアンサー
  • e101tre
  • ベストアンサー率38% (7/18)
回答No.1

これは、count 単独での出力より先に tripleByReference(count) の演算が行われているためです。 以下に示すように、出力を 2行にわければ、Hi104 さんの期待されているような結果が得られると思います。 cout << "コピー: " << count << "\t"; cout << tripleCallByValue(count) << endl; cout << "参照 : " << count << "\t"; cout << tripleByReference(count) << endl; cout << "コピー: " << count << "\t"; cout << tripleCallByValue(count) << endl; cout << "参照 : " << count << "\t"; cout << tripleByReference(count) << endl;

Hi104
質問者

お礼

早速の回答ありがとうございます。2行に分けてみたら、期待通りの結果が出ました。 でも、なぜ一行で書くと、tripleByReference(count) が先に演算されるのでしょうか?ストリーム演算子の処理は左から右へ行くのではないですか? cin >> x >> y ; の場合は、入力はX, yの順に進みますよね?

その他の回答 (1)

  • e101tre
  • ベストアンサー率38% (7/18)
回答No.2

演算順序については、以下の URL が参考になると思います。 "評価順序" で Webを検索すると、他にもたくさん参考になるページがヒットします。

参考URL:
http://f1.aaacafe.ne.jp/~pointc/log67.html
Hi104
質問者

お礼

ストリーム演算子(正確にはシフト演算子?)の結合順序が、左から右と書いてあったので、この順序で関数も評価されるものと思ってました。関数の場合は引数の処理があるので、一端こちらを処理してから、出力ストリーム文が左から右に処理されるんですね。リンク先の記述にはMS-DOS系では・・・となっていたので、UNIX系ではまた違うんですかね。 今回は大変勉強になりました。どうもありがとうございました。 「引数は右から左に評価される」、覚えました。

関連するQ&A