Gas

虛擬功能會增加氣體使用量嗎?

  • December 9, 2020

假設我們用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執行時沒有意義。

希望能幫助到你。

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