solidity constant 和 immutable 状态变量_chain cosmos的博客-爱代码爱编程
状态变量声明为 constant
(常量)或者 immutable
(不可变量),在这两种情况下,合约一旦部署之后,变量将不在修改。
特点如下:
- 对于
constant
常量, 他的值在编译器确定,而对于immutable
, 它的值在部署时确定。 - 与常规状态变量相比,常量和不可变量的gas成本要低得多,immutable成本比constant高
- 不是所有类型的状态变量都支持用 constant 或
immutable
来修饰,当前仅支持 字符串 (仅常量) 和 值类型。 - 如果状态变量声明为
constant
(常量)。在这种情况下,只能使用那些在编译时有确定值的表达式来给它们赋值 - 声明为不可变量(
immutable
)的变量,可以在合约的构造函数中或声明时为不可变的变量分配任意值。immutable
只能赋值一次,并且在赋值之后才可以读取 -
immutable可以在声明时赋值,不过只有在合约的构造函数执行时才被视为视为初始化。 这意味着,你不能用一个依赖于不可变量的值在行内初始化另一个不可变量。 不过,你可以在合约的构造函数中这样做。
这是为了防止对状态变量初始化和构造函数顺序的不同解释,特别是继承时,出现问题。