- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:参照渡しの間違ったコードの謎?)
参照渡しの間違ったコードの謎?
このQ&Aのポイント
- C++初心者が参照渡しの間違ったコードを書いてしまいました。
- コードの結果を見ると、2行目の参照渡しの仮引数が意図しない値であることがわかります。
- 間違った処理が行われ、結果が予測と異なるため、解説を求めています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
これは、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;
その他の回答 (1)
- e101tre
- ベストアンサー率38% (7/18)
回答No.2
演算順序については、以下の URL が参考になると思います。 "評価順序" で Webを検索すると、他にもたくさん参考になるページがヒットします。
質問者
お礼
ストリーム演算子(正確にはシフト演算子?)の結合順序が、左から右と書いてあったので、この順序で関数も評価されるものと思ってました。関数の場合は引数の処理があるので、一端こちらを処理してから、出力ストリーム文が左から右に処理されるんですね。リンク先の記述にはMS-DOS系では・・・となっていたので、UNIX系ではまた違うんですかね。 今回は大変勉強になりました。どうもありがとうございました。 「引数は右から左に評価される」、覚えました。
お礼
早速の回答ありがとうございます。2行に分けてみたら、期待通りの結果が出ました。 でも、なぜ一行で書くと、tripleByReference(count) が先に演算されるのでしょうか?ストリーム演算子の処理は左から右へ行くのではないですか? cin >> x >> y ; の場合は、入力はX, yの順に進みますよね?