solidity Constant 和 Immutable 状态变量

状态变量声明为 constant (常量)或者 immutable (不可变量),在这两种情况下,合约一旦部署之后,变量将不在修改。

特点如下:

  1. 对于 constant 常量, 他的值在编译器确定,而对于 immutable, 它的值在部署时确定。
  2. 与常规状态变量相比,常量和不可变量的gas成本要低得多,immutable成本比constant高
  3. 不是所有类型的状态变量都支持用 constant 或 immutable 来修饰,当前仅支持 字符串 (仅常量) 和 值类型。
  4. 如果状态变量声明为 constant (常量)。在这种情况下,只能使用那些在编译时有确定值的表达式来给它们赋值
  5. 声明为不可变量(immutable)的变量,可以在合约的构造函数中或声明时为不可变的变量分配任意值。 immutable只能赋值一次,并且在赋值之后才可以读取
  6. immutable可以在声明时赋值,不过只有在合约的构造函数执行时才被视为视为初始化。 这意味着,你不能用一个依赖于不可变量的值在行内初始化另一个不可变量。 不过,你可以在合约的构造函数中这样做。

    这是为了防止对状态变量初始化和构造函数顺序的不同解释,特别是继承时,出现问题。

猜你喜欢

转载自blog.csdn.net/m0_37298500/article/details/126998309
今日推荐