最近在学智能合约的编写,其中,对constant view pure的认识很模糊,于是查了些资料总结一下。

首先,这三个修饰词都意味着不需要消耗gas。

1、constant 常量,意味着不可变化。可以读取状态变量但是不能改。不是所有的类型都支持常量,它只能修饰值类型的变量和字符串。

pragma solidity ^0.4.20;contract Test {uint public m1 = 2; //普通uint类型uint constant m2 = 2;//constant修饰的uint常量string str1 = "string1";//普通string类型string constant str2 = "string2";//constant修饰的string常量function f1() public {m1  = 20;// m2 = 20;  // 出错,无法修改constant修饰的常量(值类型)str1 = "String1!"; // str2 = "String2!";   // 出错,无法修改constant修饰的常量(string类型)}// 结构体类型(引用类型)struct Person {string name;uint age;}// Person constant p1;  // 出错, constant仅可以修饰值类型,无法修饰引用类型(string除外)function f2() constant public {m1 = 5; // constant修饰的函数内,如果修改了状态变量,那么状态变量的值是无法改变的!!// 状态变量m1的值还是2,并未被修改。}

2、view
只可以修饰函数,不可以修饰变量。
它表明该函数内部可以对storage类型的变量进行读取,无法修改。(类似constant修饰的函数)

3、pure
只能修饰函数。
它表明该函数内,无法读/写状态变量,否则编译通不过。

function f3() pure public returns(uint){//return m1;  // 出错, pure修饰的函数内部无法修改也无法读取状态变量。}

参考:https://blog.csdn.net/houyanhua1/article/details/88964166

Solidity-constant、view、pure的区别相关推荐

  1. Solidity constant view pure关键字的区别

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

  2. Oracle public view,【易错概念】以太坊Solidity函数的external/internal,public/private,view/pure/payable区别...

    1. 函数类型:内部(internal)函数和外部(external)函数 函数类型是一种表示函数的类型.可以将一个函数赋值给另一个函数类型的变量,也可以将一个函数作为参数进行传递,还能在函数调用中返 ...

  3. Solidity中view和pure的用法

    getter 类型的函数可以被view 或者 pure 修饰. view 修饰的函数不能改变状态变量.pure 则既不能改变状态变量,也不取读取状态变量. // SPDX-License-Identi ...

  4. self.view = nil 和[self.view release]的区别

    再看视频的时候很多地方对于对象的释放老师分别用了两种方式: 1:release.减1的引用技术; 2:直接用nil赋值; 困惑来了,两种方式有啥区别呢? 在用retain或者copy的时候,self. ...

  5. 微信小程序中,block标签与view标签的区别及实例应用

    介绍 在微信小程序开发当中,除了最常使用的 <view> 标签以外, 还有 <block> 标签: 这两个标签还是有很明显的区别的:具体如下: 定义 <view> ...

  6. 【Android 应用开发】View 与 SurfaceView 区别

    文章目录 组件刷新所在线程 性能 资源 操作 主动更新与被动更新 View , SurfaceView , GLSurfaceView 组件刷新所在线程 1. View 主线程刷新 UI : View ...

  7. Android之动画精讲一:从setTranslationX谈属性动画和view动画的区别

    转载:http://blog.csdn.net/yanzi1225627/article/details/47850471 最近又用到了动画,决定把几次项目里用到的动画走过的弯路总结一下,顺便梳理下a ...

  8. android view getwidth 0,Android中View.getWidth()和View.getMeasuredWidth()的区别

    一.也許很多童鞋對getWidth()和getMeasuredWidth()的用法有很多的不解,這兩者之間有什麼樣的不同呢,網上也有各種不同的版本,但大多數都大同小異,從這個地方Ctrl+C,到另一個 ...

  9. Jmeter之Constant Timer与constant throughput timer的区别

    当放置Constant Timer于两个http请求之间,那么它代表的含义是:在上一个请求发出至完成后, 开始Contant Timer指定的时间,最后再发出第二个请求.它并不是代表两个请求之间的发送 ...

最新文章

  1. java 静态内部类 弱引用_Java基础 强引用、弱引用、软引用、虚引用
  2. android SurfaceView
  3. python3字典(Map)
  4. Python实训day05am【正则表达式、网络爬虫】
  5. Lync Server 2013企业版部署系列之四:SQL准备
  6. vector向量容器元素排序与查找
  7. 何冲(为奥运冠军名字作诗)
  8. 二、saltstack基础配置
  9. 小数形式与科学计数法转换c语言,BUAA小数形式与科学计数法转换(简)
  10. 【MapGIS】常见问题处理
  11. 如何导出微信聊天记录
  12. Qt 中使用librdkafka librdkafka++ 创建消费者
  13. 反射修改jsessionid实现Session共享
  14. Cortex-M3/M4内核处理器一次中断事件可能产生两次中断问题
  15. 谁说文艺青年开花店必亏,我用3年时间挣了20万
  16. Macbook中的文件显示与隐藏方法
  17. 游戏人物属性如何设计
  18. java 读取sqlite_在Java中使用Sqlite数据库
  19. 【C语言】函数的数组传参
  20. 达人评测 i7 12700H和R7 6800H选哪个好

热门文章

  1. 第11章JSP开发模型
  2. Docker教程(一)安装Docker
  3. Intellij热部署插件JRebel的详细配置及图解
  4. Android文件系统基本认识
  5. imazing和itunes哪个好,手把手教你如何使用iMazing代替iTunes作为管理和备份iOS设备
  6. 求一个校园生活服务类型的网站源码
  7. WebCollector教程——爬取新浪微博
  8. AGI 通用人工智能的演变 | The Evolution of Artificial General Intelligence
  9. Win7安装Ubuntu虚拟机异常处理:FATAL: NO bootable medium found! System halted
  10. Kotlin自定义View之DataBinding