Solidity

為什麼 ++i 比 i++ 消耗更少的 gas?

  • August 7, 2022

為什麼在 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 處的值。

引用自:https://ethereum.stackexchange.com/questions/133161