您当前的位置: 首页 > 

培根芝士

暂无认证

  • 0浏览

    0关注

    446博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Solidity constant view pure关键字的区别

培根芝士 发布时间:2021-12-31 15:48:55 ,浏览量:0

在Solidity中constant、view、pure三个函数修饰词的作用是告诉编译器,函数不改变/不读取状态变量,这样函数执行就可以不消耗gas了(是完全不消耗!)

constant view pure区别和联系

在Solidity v4.17之前,只有constant,后来有人嫌constant这个词本身代表变量中的常量,不适合用来修饰函数,所以将constant拆成了view和pure。

view的作用和constant一模一样,可以读取状态变量但是不能改;

pure则更为严格,pure修饰的函数不能改也不能读状态变量,否则编译通不过。

pragma solidity ^0.4.21;

contract constantViewPure{
    uint public age;
    
    function constantViewPure() public{
        age = 29;
    }

    //声明为constant,在函数体中又试图去改变状态变量的值,编译会报warning, 但是可以通过
    function getAgeByConstant() public constant returns(uint){
        age += 1; 
        return age; // return 30, age的值不会改变,仍然为29
    }

    //view和constant效果一致,编译会报warning,但是可以通过
    function getAgeByView() public view returns(uint){
        age += 1; 
        return age; // return 30,age的值不会改变,仍然为29
    }
    
    //pure比constant和view都要严格,pure完全禁止读写状态变量
    function getAgeByPure() public pure returns(uint){
        return age; //编译报错
    }
}

关注
打赏
1660824269
查看更多评论
立即登录/注册

微信扫码登录

0.0394s