• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++ operatorの使用について)

C++ operatorの使用について

このQ&Aのポイント
  • C++初心者がオペレーターの使用方法を勉強しています
  • 特定の文の処理を理解できず行き詰っています
  • オペレーターの処理順と結果の理解が必要です

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

  • ベストアンサー
回答No.2

> デバック処理で追った結果、abc::operator+(abc a)を抜けた時点で、x.defが"HelpM"に変更されており、その後xを引数としてabc::operator=(abc x)へ処理しているように見えました。 そうですか? operator+の定義からすると、新たにcというオブジェクトを作成して、cにxの内容をコピーし、cに対してaの内容を結合したあとでcをreturnしていると思いますが。 > x=xから処理されないのは何故でしょうか。 演算子には優先順位というものがあります。代入演算=は加算演算子+よりも優先順位が低いため、+の方が先に処理されます。 算数で、1+2*3は2*3を先に計算すると教わりましたよね。それと同じように、演算子によって優先順位が付けられていて、順位の高いものから処理されます。順位が同じ場合には計算の方向が決められています。例えば、+を複数使用した式の場合、左から右へ処理すると決められているため、a+b+cはa+bを先に処理する、つまり(a+b)+cとして処理されます。代入演算子=の場合は逆に右から左と決められているため、a=b=1はb=1のあとでa=bが処理されます。

maple0823
質問者

お礼

優先順位について把握していなかったので、とても勉強になりました。 そして、処理の流れが理解でき、他のプログラムも問題なく読めました。 ご丁寧な回答をありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

> return value: HelpM\n(\:バックスラッシュ)がx, y, zのどこに入るのか、 どこにも入りません。だって、そんな処理はコードに書かれていないでしょ。 x+zの結果は一時オブジェクトとして、既存のオブジェクトとは別に保持されます。 これは、クラスに限ったことではありません。 3つのdouble型変数a,b,cがあったとして、a+b+cを計算する場合に、まずはa+bを計算します。その結果はaにもbにもcにも入りませんよね。a+bの結果は一時的な変数に保存し、その値とcを加算します。

maple0823
質問者

補足

回答ありがとうございます。 デバック処理で追った結果、abc::operator+(abc a)を抜けた時点で、x.defが"HelpM"に変更されており、その後xを引数としてabc::operator=(abc x)へ処理しているように見えました。 >3つのdouble型変数a,b,cがあったとして、a+b+cを計算する場合に、まずはa+bを計算します。 >その結果はaにもbにもcにも入りませんよね。a+bの結果は一時的な変数に保存し、その値とcを加算します。 ⇒今回の、x = x + zは、x(z)をまず行い、x(x(z))を行っているように見えるのですが、 x=xから処理されないのは何故でしょうか。

すると、全ての回答が全文表示されます。

関連するQ&A