🦁

プレインクリメントの挙動

に公開

上の実行結果は何になると思いますか?

正解は以下です。

ポストインクリメントされたbの返り値は、インクリメントする前の値です。よってcは6となります。

int j = i;
i = i + 1;
return j;

一方で、プレインクリメントされたaの返り値は6となっていますね。以下がその内部挙動です。

int i = i + 1;
return i;

forループではプレ、ポストに関わらずfor文の中に書かれた処理のあとインクリメントされます。
不要にメモリ(この場合変数j)を使用しないためには、プレインクリメントを使うのがいいでしょう。コンパイルで最適化されるケースとされないケースがあるそうです。詳しくは参考文献をご覧ください。

一部のLLMはプレインクリメントを好んで使っていますね。開発者が指示しているのか気になります。

参考文献
[1] ループでi++を使うのは止めよう〜++ iがi ++よりも優れていることが多い理由(前置インクリメント vs 後置インクリメント)〜
https://qiita.com/baby-degu/items/901f22c7758d3f619a33

Discussion