前言
大一在學程式語言時,關於 ++i
跟 i++
只記得老師有特別說這是先加跟後加的差別
其他一些細節忘了,如今再回頭練習基本的 C/C++
才發現自己很多觀念還需要再重構(就跟以前寫的程式碼一樣…OTZ)
解釋
如果今天是一個簡單的for迴圈,++i跟i++在執行結果上是沒有差別的,可是如果情況是比較單一的,像是以下的例子,就會發現先做跟後做的差別了
1 | i++ |
1 | ++i |
上述例子不難理解,但我這裡主要想記錄的是先執行跟後執行在程式背後的差別
在C++物件導向的設計中,在做 i++
時,是用 operator++()
這個 function,而這個 function 會先複製目前i的值到一個暫存變數中,然後先回傳這個暫存變數,最後才會利用 reference 的方式 increment
但如果是 ++i
則會直接做 increment,然後回傳 *this
i++
- i → assign → increment
++i
- i → increment → assign
piece of code from cppreference:
1 | struct X{ |
心得
滿多書本或是網路上的資料都說在寫迴圈時,若無特殊需求,i++
或 ++i
並不會影響結果,但是就影響 performance 的潛在機會而言,++i
會是較好的選擇與習慣
不過我覺得除非真的是處理非常大非常大的迴圈(?
不然現今的 Compiler 都優化的滿不錯的,或許差別並沒有想像中的大吧…
但還是稍微學到了一課,原來 i++
跟 ++i
的細節是這樣的