MQL4编程语言提供了丰富的操作符来支持程序的编写,其中三元操作符“?:”就是一种常用的条件判断操作符。本文将详细解析三元操作符的使用方法以及在使用过程中的注意事项。
一、三元操作符的基本用法
三元操作符的一般形式如下:
表达式1 ? 表达式2 : 表达式3
“表达式1″可以是任何结果为布尔类型的表达式。如果结果为true,则执行”表达式2″所代表的操作。如果结果为false,则执行”表达式3″。
“表达式2″和”表达式3″需要返回相同类型的值,且不能为void类型。三元操作符的执行结果就是”表达式2″或”表达式3″的结果,取决于”表达式1″的结果。
例如:
double true_range = (High==Low) ? 0 : (Close-Open)/(High-Low);
这段代码等同于:
double true_range;
if(High==Low)
true_range=0;
else
true_range=(Close-Open)/(High-Low);
二、使用限制
根据”表达式1″的值,三元操作符必须返回两个可能的值 – “表达式2″或”表达式3″。这些表达式存在一些限制:
- 不要混用用户定义类型与简单类型或枚举。指针可以使用NULL。
- 如果值的类型是简单的,操作符将为最大类型(参见类型转换)。
- 如果其中一个值是枚举,而另一个值是数值类型,那么枚举被替换为int,然后应用第二条规则。
- 如果两个值都是枚举,它们的类型必须相同,操作符将为枚举类型。
对于用户定义类型(类或结构)的限制:
a. 类型必须相同,或者一个类型必须是另一个类型的派生类。
b. 如果类型不相同(继承关系),子类将被隐式转换为父类,即操作符将为父类类型。
c. 不要混用对象和指针 – 两个表达式必须都是对象或指针。指针可以使用NULL。
三、注意事项
在将条件操作符作为重载函数的参数时,要小心,因为条件操作符的结果类型在程序编译时就确定了。这个类型是”表达式2″和”表达式3″中较大的类型。
例如:
void func(double d) { Print("double argument: ",d); }
void func(string s) { Print("string argument: ",s); }
bool Expression1=true;
double Expression2=M_PI;
string Expression3="3.1415926";
void OnStart()
{
func(Expression2);
func(Expression3);
func(Expression1?Expression2:Expression3); // warning on implicit casting to string
func(!Expression1?Expression2:Expression3); // warning on implicit casting to string
}
以上就是MQL4编程中使用三元操作符的基本知识和技巧。理解和掌握这些,将帮助我们更好地编写和优化MQL4程序。