2.6.3.显式类型转换

对于显式类型转换,MQL5 支持两种形式的符号:C 语言风格和“函数式”。C 语言风格的语法如下:

target t = (target)s;

其中 target 是目标类型的名称。任何表达式都可以是数据源 s。如果其中执行了任何运算,则必须将表达式放入圆括号中,以便类型转换适用于整个表达式。

另一种“函数式”语法如下所示:

target t = target(s);

我们来看几个例子。

double w = 100.0v = 7.0;
int p = (int)(w / v);      // 14

此处,两个实数相除的结果被显式转换为 int 类型。这样程序员确认了丢弃小数部分的意图,编译器不会发出警告。应该注意的是,MQL5 有一组函数,用于以各种方式对实数进行舍入(参见 数学函数)。

相反,如果希望对整数执行运算并得到实数结果,则需要对操作数应用类型转换(在表达式中):

int x = 100y = 7;
double d = (double)x / y;  // 14.28571428571429

转换其中一个操作数就足以自动将其余的操作数转换为相同类型。

如有必要,您可以连续执行多个类型转换操作。因为转换操作具有右结合性,所以按从右到左的顺序应用目标类型。在下面的例子中,我们将商转换为 float 型(这种转换能够以更紧凑、更少字符表示值),然后转换为 string。如果没有显式转换为 string,我们将遇到编译器警告“数字隐式转换为字符串”。

Print("Result:" + (string)(float)(w / v)); // Result:14.28571

切勿只是为了避免编译器警告而使用显式类型转换。如果没有实践依据,那就是在掩盖程序中的潜在错误。