在 Solidity 中,每个变量在声明时都会有默认的初始值,这些值取决于变量的类型。了解这些初始值对于避免意外行为和错误至关重要。
1. 值类型初始值
bool
:false
int
/uint
:0
address
:0x0000000000000000000000000000000000000000
- 定长字节数组 (
bytes1
到bytes32
): 每个字节0
- 枚举 (
enum
): 枚举的第一个成员
示例:
pragma solidity ^0.8.0;
contract InitialValues {
bool public defaultBool; // false
uint public defaultUint; // 0
int public defaultInt; // 0
address public defaultAddress; // 0x0000000000000000000000000000000000000000
bytes1 public defaultBytes1; // 0x00
}
2. 引用类型初始值
- 动态字节数组 (
bytes
/string
): 空值""
或0x
- 动态数组: 空数组
- 固定大小数组: 每个元素初始化为该类型的初始值
- 结构体 (
struct
): 所有成员初始化为其类型的初始值 - 映射 (
mapping
): 空映射,查询任意键返回值类型的初始值
示例:
pragma solidity ^0.8.0;
contract InitialValues {
bytes public defaultBytes; // 0x
string public defaultString; // ""
uint[] public defaultUintArray; // []
struct Student {
uint id;
uint score;
}
Student public defaultStudent; // {id: 0, score: 0}
mapping(address => uint) public defaultMapping; // 对任意地址查询返回 0
}
3. 函数返回值初始值
函数返回值未指定时,返回该类型的默认初始值。
示例:
pragma solidity ^0.8.0;
contract InitialValues {
function getDefaultUint() public pure returns (uint) {
uint x;
return x; // 0
}
}
4. 总结
Solidity 中每种数据类型都有默认初始值。理解这些初始值有助于编写安全可靠的智能合约,避免意外的行为和错误。