MQL5语言帮助文件人话版(二十二)数据类型之&和this

| 发表于 昨天 15:25 | 显示全部楼层 |复制链接
第二十二章 &和this

这是本人话版手册,数据类型的最后一篇了。按原手册的内容,这一篇有三个概念:`&引用`、`&取地址符`、`this`,三者底层都和内存地址挂钩。

一、引用&

通常用来应用函数的参数,就是放在函数参数里的。比如void Func(int &num),括号里就是函数的参数,int代表函数参数的类型是整型,num是参数的变量名称,这一处的断句同样是int &是一块儿,num是第二块儿。

要理解引用,必须先了解两个概念:

(1)值传递:我们之前常说数据类型是数值的包装盒子,值传递就是把盒子里的数据“复制一份”传给函数。函数里面修改副本,外面原始盒子不受影响。

(2)引用传递:不给副本,直接把原盒子本身交给函数操作。函数内修改,外面原变量跟着变。如果你传多个引用参数进去,函数可以同时修改好几个原始变量。

需要特殊说明的是,对于简单类型,比如`int`、`double`、`bool`之类的,只是代表一个数据的简单小盒子,值传递和引用传递都可以,更多的是用值传递。而对于复杂类型,比如结构体、类、数组,相当于是打包了一堆数据的大盒子,用值传递也不是不可以,但太过复杂,所以通常使用引用传递方式。

引用符号`&` 就写在类型的后面,变量名的前面,标记这是引用参数,比如我们前几段写的int &num,这是引用的格式。

注意区别,指针的符号是星号*,比如`MyObject *p`,传递的是数据地址,相当于贴在小盒子上的纸条,要用`p->`访问成员,可以接收 NULL 空地址;引用符号是&,比如`MyObject &obj,相当于直接给原盒子取了个别名供函数修改、使用,引用必须绑定一个有效变量,不能是空,用点`.`访问成员。

二、取地址符 &

取地址符 &是运算符,也就是我们下一章需要讲的东西。前面说过,它的作用是读取变量在内存里的地址数值。写在表达式里(不是类型定义处),就是取地址。比如我们前面举的例子,int *p = &a; ,&是取地址,拿到a的内存地址,赋值给指针p。

同一个符号`&`,两套含义。在类型后面变量前面:int &num → 引用;在变量前面单独使用:&a → 取地址运算符。

三、this 关键字

`this` 是类自带的隐藏指针,类型是 `MyObject *`,存放当前对象的地址,有点类似new。写在类的成员函数里面。

`this` 就代表:当前正在干活的这个对象本身的地址。



MQL5 手册推荐,结构体、数组、类对象优先用引用传递,如果不用引用,直接传结构体,会完整拷贝里面所有成员,数据量大的时候浪费时间、占用内存。只有写 class 类才会出现this 关键字,普通脚本、只写结构体的 EA,根本看不到 this。如果你写面向对象风格 EA(把订单管理、仓位逻辑封装成类),this 几乎必写;如果写简单线性流程 EA,全程不用类,就完全不用管 this。所以在此处还是先熟悉一下概念就好,等到我们真正学到“面向对象”时,再深入研究。
最近访问 头像模式
举报

评论 使用道具

精彩评论1

handong186
DD
| 发表于 1 小时前 | 显示全部楼层
感谢分享 学习了
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

麻爪

麻爪 D

如果你想让一个人下地狱,介绍他做交易。
如果你想让一个人在地狱里永不超生,介绍他做EA交易。

Fast跟单EA