欢迎光临散文网 会员登陆 & 注册

MQL5冒号(:)和双冒号(::)的用法

2023-09-16 14:12 作者:bramble1990  | 我要投稿

冒号(:)

假设操作符?:

三进制操作符一般形式如下:

对于第一个操作-"expression1"-任何表达式在布尔型中值都可以用。如果结果是true,那么第二个操作的操作符,例如 "expression2",就被执行。

如果第一操作是false,第三操作-"expression3"-就被执行。第二和第三操作,例如 "expression2"和"expression3"应该返回第一类型值,不应该是空类型。执行假设操作符的结果就是expression2的结果或者expression3的结果,都取决于 expression1。

输入等同于如下:

 

操作符使用限制

基于"expression1"值,操作符必须返回两个值中的一个 - 或者"expression2"或者"expression3"。对这些表达式有几个限制:

  1. 不要混淆 简单类型 或 枚举类型 的用户定义类型。 NULL 可能被用于指针.

  2. 如果值是简单类型,操作符将会是最大类型(请见类型转换 )。

  3. 如果一个值是枚举类型而第二个值是数字类型,那么枚举类型被整型所取代并实施第二个规则。

  4. 如果两个值都是枚举类型,它们的类型必须完全相同,并且操作符将是枚举类型。

限制用户定义类型(类或结构):

  1. 类型必须完全相同或者一个应该源自另一个。

  2. 如果类型不相同(继承类型),那么子类型会隐式转换至父类型,例如操作符将成为父类型。.

  3. 不要混淆对象和指针 - 两个表达式都是或是对象或是 指针。 NULL 不能用于指针。

注意

谨慎使用条件操作符当做重载函数的论据, 因为条件操作符的结果类型在程序编译时定义。并且该类型定义为较大的"expression2"和"expression3"。

示例:



双冒号(::)

范围解析操作符 ( :: )


mql5中每个函数都有其执行范围。例如,Print()系统函数可以在全局范围使用。Imported函数导入时使用。classes函数用在类的范围。范围解析操作语法如下:

如果没有范围名,就属于全局范围函数。如果没有范围解析操作,可以在最近范围内找到函数。如果本地范围没有函数n,需要全局搜寻函数。

范围解析操作也用在 确定函数-类成员。

在一个程序使用不同执行上下文的几个同名函数可能会引起歧义。无明确范围规范的函数调用的优先顺序如下:

  1. 类方法。如果在类中设置了无指定名称的函数,那么移到下一级别。

  2. MQL5 函数。如果语言没有这种函数,那么移到下一级别。

  3. 用户定义全局函数。如果没有找到有指定名称的函数,那么移到下一级别。

  4. 导入函数。如果没有发现有指定名称的函数,那么编译器返回一个错误。

若要避免函数调用歧义,就要使用范围解析操作,始终明确指定函数范围

 

示例:




MQL5冒号(:)和双冒号(::)的用法的评论 (共 条)

分享到微博请遵守国家法律