Solidity
為什麼 ++i 比 i++ 消耗更少的 gas?
為什麼在 Solidity 中,
i++
&++i
工作方式相同,但一個成本更高一點?看看這份契約:
contract foobar { uint[] public arr = [1,2,3,4,5]; function find() public view returns(bool) { for(uint i = 0; i < arr.length; i++ /*++i*/) { if(arr[i] == 5) { return true; } } return false; } }
當我使用此契約執行此契約時
i++
,契約的成本是:// i++ // gas 388824 gas // transaction cost 338107 gas // execution cost 338107 gas // foobar.find() execution cost 36221 gas
當我使用 執行相同的功能時
++i
,這就是成本:// ++i // gas 388327 gas // transaction cost 337675 gas // execution cost 337675 gas // foobar.find() execution cost 36201 gas
顯然,
i++
比 消耗更多的氣體++i
,但為什麼呢?謝謝
它們的工作方式不同。
i++
被編譯成類似的東西j = i; i = i + 1; return j
雖然
++i
被編譯成類似的東西i = i + 1; return i;
長話短說, i++ 返回非遞增值, ++i 返回遞增值,例如,執行
i = 0; array[i++];
將訪問數組中索引 0 處的值,而
array[++i]
將訪問索引 1 處的值。