左值运算符(Operators Involving LValues)
如果a是一个左值(LValues),即一个可以赋值给它的变量,可以使用以下的运算符:
a += e相当于a = a + e。 运算符- =,* =,/ =,% =,| =,& =和^ =都有类似的定义。a++和a--相当于a+ = 1/a - = 1,--a和++a对a有与上一条相同的效果,但是等值发生改变后才返回运算结果。
删除(delete)
delete a将对应类型的初始值赋值给a,即相当于a= 0。- 对于静态数组使用
delete时,是将数组内所有元素置为初值。而对于动态数组时,则是将长度置为0。 - 对于结构体使用
delete会将其中的所有成员变量一一置为初值。 delete对mapping没有效果(因为映射的密钥可以是任意的,并且通常是未知的)。因此,如果delete一个struct,将重置所有不是映射的mapping,也会递归到成员中,除非它们是映射。不过,单独的键和键对应的值可以被delete。
注意,delete a的行为非常类似于对a赋值,即a中存储了一个新的对象:
pragma solidity ^0.4.0;
contract DeleteExample {
uint data;
uint[] dataArray;
function f() public {
uint x = data;
delete x; // sets x to 0, does not affect data
delete data; // sets data to 0, does not affect x which still holds a copy
uint[] storage y = dataArray;
delete dataArray; // this sets dataArray.length to zero, but as uint[] is a complex object, also
// y is affected which is an alias to the storage object
// On the other hand: "delete y" is not valid, as assignments to local variables
// referencing storage objects can only be made from existing storage objects.
}
}

本文详细介绍了在Solidity中左值运算符的应用及行为,包括加减乘除等复合赋值运算符,以及++和--运算符的使用方式。此外还探讨了delete运算符如何重置不同类型的变量到其初始状态。
567

被折叠的 条评论
为什么被折叠?



