深入理解Solidity——左值运算符

左值运算符(Operators Involving LValues)

如果a是一个左值(LValues),即一个可以赋值给它的变量,可以使用以下的运算符:

  • a += e相当于 a = a + e。 运算符- =* =/ =% =| =& =^ = 都有类似的定义。
  • a++a--相当于a+ = 1 /a - = 1,
  • --a++aa有与上一条相同的效果,但是等值发生改变后才返回运算结果。

删除(delete)

  • delete a将对应类型的初始值赋值给a,即相当于a= 0
  • 对于静态数组使用delete时,是将数组内所有元素置为初值。而对于动态数组时,则是将长度置为0。
  • 对于结构体使用delete会将其中的所有成员变量一一置为初值。
  • deletemapping没有效果(因为映射的密钥可以是任意的,并且通常是未知的)。因此,如果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——映射

下一篇:深入理解Solidity——隐式转换和显式转换

你可能感兴趣的:(Solidity文档翻译系列,以太坊去中心化应用开发)