Re: [問題] for迴圈 和++i i++的問題

看板C_and_CPP (C/C++)作者 (Alien)時間16年前 (2009/08/24 12:30), 編輯推噓8(807)
留言15則, 4人參與, 最新討論串3/3 (看更多)
※ 引述《Waterpig (waterpig)》之銘言: : ++i 是先將i指派為i+1後再將i+1的值傳出 : i++ 是先傳出i值 再指派i為i+1 : 以上我的理解應該沒錯吧? : 我的問題在於for迴圈 : for迴圈的流程是 : ┌──假──→離開迴圈 : │ : 進入迴圈→設定記次變數起始值→測試條件式──真─→程式區段→更新計次變數 : ↑ │ : │ │ : └──────────────┘ : 這時候 for (i=0;i<=3;++i){程式區段} : 和 for (i=0;i<=3;i++){程式區段} : 兩個差別在於哪? 這樣的理解其實有點錯 比較正確的是, ++i 是 increment 後, 再 evaluate 為 increment 後的值 i++ 則是 increment 後, evaluate 為 increment 前 的值. 你寫 C++, 寫過 operator overloading 就會感受到上面說的跟你說的分別 在哪裡. 另, for 的差別, 請看 #169W5nMh -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.155.236.82

08/24 12:35, , 1F
所以才會說未最佳化的話, i++可能效能略差, 因為多一個
08/24 12:35, 1F

08/24 12:35, , 2F
mov與暫用一個temp register....@_@"
08/24 12:35, 2F

08/24 13:30, , 3F
primitive type, compiler 不至於會多用一個 register 吧
08/24 13:30, 3F

08/24 13:36, , 4F
我是習慣使用 i++, 既然樓上的都這麼說,我來 bench 看看
08/24 13:36, 4F

08/24 13:38, , 5F
請教l大, 為什麼primitive type就不用多個 reg 呢?_?
08/24 13:38, 5F

08/24 13:38, , 6F
回s大, 個人覺得disasm比較直接, 因為通常i++/++i的
08/24 13:38, 6F

08/24 13:39, , 7F
overhead遠小於其他code吧?? 光是compare就不知道比
08/24 13:39, 7F

08/24 13:39, , 8F
它慢多少了不是嗎?_?
08/24 13:39, 8F

08/24 13:40, , 9F
啊, 忘了迴圈也可以不要終止條件無窮跑下去....XD
08/24 13:40, 9F

08/24 17:09, , 10F
我猜測 compiler 會知道 i++ 要不要 keep 那個 i 吧
08/24 17:09, 10F

08/24 17:10, , 11F
至少我 gcc -S 看起來是沒差的, 其它 compiler 就不知了
08/24 17:10, 11F

08/24 17:33, , 12F
compiler知道要不要keep, 就是有一定程度opt啦@_@"
08/24 17:33, 12F

08/24 17:33, , 13F
小弟本來是想說直接看 i++ 與 ++i 的組語各是怎翻的XD
08/24 17:33, 13F

08/25 02:17, , 14F
沒加 optimize 參數喔, 我覺得是免費送的 XD
08/25 02:17, 14F

08/25 18:44, , 15F
對primitive type根本沒差..
08/25 18:44, 15F
文章代碼(AID): #1AaXTWDn (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AaXTWDn (C_and_CPP)