Читаю статью Ордерa, позиции и сделки в MetaTrader 5. Там вижу такую строку:
Я так понимаю здесь возвращаемое значение HistoryOrderGetInteger() приводится к типу ENUM. Тока вот подобных вариантов ни в документации, ни где-либо до сегодняшнего момента я не встречал. С чего бы это вдруг?
Ведь функция HistoryOrderGetInteger() возвращает тип long. А приводить long к ENUM... Это же не совсем корректно. Почему так?
В данном случае тип функции определяет максимальную ширину канала данных которые могут быть возвращены. В зависимости от модификатора функция возвращает разные данные в том числе и тикеты.
В конкретном же Энумероторе явно описываются все варианты значений для данного модификатора.
Так что всё нормально, для модификатора ORDER_STATE тип возвращаемого значения ENUM_ORDER_STATE как раз и создан чтоб не запутаться при передаче через универсальный порт.
В данном случае тип функции определяет максимальную ширину канала данных которые могут быть возвращены. В зависимости от модификатора функция возвращает разные данные в том числе и тикеты.
В конкретном же Энумероторе явно описываются все варианты значений для данного модификатора.
Так что всё нормально, для модификатора ORDER_STATE тип возвращаемого значения ENUM_ORDER_STATE как раз и создан чтоб не запутаться при передаче через универсальный порт.
Не совсем так. Внутреннее представление enum само по себе есть long, поэтому как такового приведения типов не происходит.
Это просто дополнительная возможность внутреннего контроля самого программиста.
Если вы не сделаете приведение к энумератору, то компилятор выдаст предупреждение на потенциально опасное место.
Вы естественно проверите это место, нет ли там ошибки, а проверив поставите приведение и предупреждение исчезнет.
Впрочем вы можете и проигнорировать предупреждения компилятора, в конце концов ведь это не ошибка.
Я бы сказал что такое приведение делается эстетики для.
Я бы сказал что такое приведение делается эстетики для.
:)
Конкретно в статье это было сделано по требованию модератора принимавшего статью.
Нельзя сдавать статью если компилятор выдаёт предупреждения.
:)
Конкретно в статье это было сделано по требованию модератора принимавшего статью.
Нельзя сдавать статью если компилятор выдаёт предупреждения.
Да, это приведение типа. Приведения делятся на явные и неявные. В случае когда требуется привести меньший тип к большому приведение типов работает "за кулисами" и явно указывать тип приведения не нужно:
int small = 1; long big = small;
Этот код скомпилируется без ошибок и предупреждений. Однако обратное не верно, код:
long big = 1; int small = big;
Вызовет предупреждение:
Потому что делается явная попытка привести меньший тип к большему. Для того что бы это избежать используйте явное приведение:
long big = 1; int small = (int)big;
Т.е. Вы говорите компилятору, что знаете что делаете и уверены в корректности приведения.
Явное приведение к типу enum всегда необходимо, т.к. enum - по сути специальный, 4 байтовый, строгий тип, принимающий строго определенные значения. Enum используется в том числе для контроля типов, где строгое приведение критично важное свойство.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Читаю статью Ордерa, позиции и сделки в MetaTrader 5. Там вижу такую строку:
Я так понимаю здесь возвращаемое значение HistoryOrderGetInteger() приводится к типу ENUM. Тока вот подобных вариантов ни в документации, ни где-либо до сегодняшнего момента я не встречал. С чего бы это вдруг?
Ведь функция HistoryOrderGetInteger() возвращает тип long. А приводить long к ENUM... Это же не совсем корректно. Почему так?