Gas
虛擬功能會增加氣體使用量嗎?
假設我們用
balances[user]
呼叫myBalance(user)
where替換每個表達式mapping(address => uint256) balances; function myBalance(address user) returns (uint256) virtual internal { return balances[user]; }
並且不繼承本契約。
這會增加gas使用量嗎?
如果我繼承,會增加這個基礎(父)合約的 gas 使用量嗎?
我對 Solidity 0.5.10 及更高版本感興趣。
不。
這是一個編譯時問題。它並不總是必需的,但它已被添加到編譯器中以使開發人員的意圖更加清晰 - 如果您嘗試覆蓋未標記的函式,編譯器將拋出錯誤
virtual
。如果您確實覆蓋了該函式,則唯一重要的函式版本是覆蓋了繼承的低階函式的最高階函式。在執行時,重要的是獲勝版本的字節碼。它的字節碼進入部署的執行時字節碼。
換句話說,編譯器正在解決函式版本之間的競爭以包含最終契約,並且
virtual
修飾符明確表示給定函式是替換的候選者,作為開發人員錯誤檢測的一種形式。修飾符在virtual
執行時沒有意義。希望能幫助到你。