• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複合代入演算子について)

複合代入演算子について

このQ&Aのポイント
  • 複合代入演算子についての質問です。
  • 具体的なコード例として、_stprintf_s関数を使用して文字列を書き込む場合に、代入演算子+=を使用した場合と、等価の代入文を使用した場合の動作について質問しています。
  • また、enum定義や条件分岐などについても言及しています。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

この例では間違いでは無いですが、変に複雑に考えすぎてる気がします。 もっと単純に right = _stprintf_s( c + len, size_t(SIZE_ - len), 何々 ); len = len + right ; と考えれば、「演算前」かどうかわかるのでは? あと「この例では間違いでは無い」としました。 厳密には、 a += b ; a = a+b ; は「等価ではありません」 等価で無い例) *(pa ++ ) += b ; *(pa ++ ) = *(pa ++ ) + b ;

LongSecret
質問者

お礼

ありがとうございます♪ これが気になった時は >right = _stprintf_s( c + len, size_t(SIZE_ - len), 何々 ); >len = len + right ; このように書けば間違いないと私も思ったのですが、上のように書けるならばそのためだけに変数を一つふやすのは表記としては冗長のような気がしたので… >あと「この例では間違いでは無い」としました。 >厳密には、 >a += b ; >a = a+b ; >は「等価ではありません」 上記の場合はマクロ的な話ではなく、 私が書いた int a=0, b=1; より、aとbが同じint型と書いてあるので問題はなしでしょう。 もし その表記がなく、あるいはマクロなどであれば(また、C++でのoperator等はなしとしても) >*(pa ++ ) += b ; >*(pa ++ ) = *(pa ++ ) + b ; 等はおっしゃる通り等価ではないですね。