Solc

SOLIDITY:嵌套語句中的賦值運算符行為是否正式化?

  • January 3, 2019

事實上,solidity 在嵌套賦值中似乎具有與 C 相同的行為。

即執行下面的範例測試合約,呼叫nestedSum(1) 結果如下:a=38, b=16, c=4

pragma solidity 0.5.1;

contract test { 
   uint256 public a;
   uint256 public b;
   uint256 public c;

   function nestedSum (uint256 d) public
   {
       a = (b = (c = d + 3) + 12) + 22;
   }
}

文件的某些部分是否描述了這種行為,並且是否保證在編譯器的版本控制中保持穩定?

非常感謝。

鑑於沒有答案,但已經完成了一些評論和一些離線研究,為了清楚起見,我回答了我之前的問題。

簡而言之,答案是官方文件中沒有提到這一點,但鑑於它:

  1. 由於基於堆棧的計算的自然行為,很容易獲得 2) 編譯器可以毫不費力地接受 3) 在許多情況下允許避免使用臨時變數

沒有什麼比 ‘++k;’ 更奇怪了。或’a /= 2;’ 因為這種簡短的形式完全來自機器的堆棧性質。

但它沒有被形式化為語言的一個單獨元素。

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