零值

变量初始化

Solidity 中,当一个变量被声明时可以指定一个初始化值,如 int a = 1

Solidity 中不存在 undefined/null 的概念,因此如果未指定初始化值,则统一都初始化为零值

对于值类型:

  • 布尔类型:初始化为 false
  • 整数类型:初始化为 0
  • 定点小数:不可用
  • 地址类型:初始化为 0x0000000000000000000000000000000000000000
  • 枚举:初始化为第一个枚举值(该枚举值对应整数为 0
  • 定长字节数组:数组内所有元素初始化为 0
  • 合约:初始化为地址 0x0000000000000000000000000000000000000000
  • 自定义类型:绑定的原类型零值
  • 函数:无值,未初始化调用引发错误

对于引用类型:

  • 动态数组(包括 string):初始化为长度为 0 的数组
  • 结构体:结构体内的所有变量初始化为其对应的零值
  • mapping:默认认为所有可能的 key 值都存在,且都初始化为 零值。例如声明 mapping(string => int) m 后访问 m["not exists key"] 将返回 0

变量删除

Solidity 中使用 delete var 来删除变量 var。但是由于并没有 undefined/null 的概念,因此该操作实际上只是将变量 var 恢复为对应类型的 零值