零值
变量初始化
在 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
恢复为对应类型的 零值
。