Явное приведение типов

Для явного приведения типов в 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

Не используйте явное приведение типов только для того, чтобы подавить предупреждение компилятора. Если это не имеет под собой прикладного основания, вы тем самым маскируете потенциальную ошибку в программе.