Новая версия платформы MetaTrader 5 build 4260: общие улучшения - страница 7

 
Renat Fatkhullin #:

В первом случае тройная проверка индексированного доступа, а во второй одно индексирование с последовательным заполнение одного блока, что хорошо оптимизируется. Требования безопасности языка не позволяет пропускать контроль индексного доступа.

Т.е., это означает, что при частом (только) последовательном переборе лучше использовать однонаправленный список указателей на объекты, чем массив тех же указателей?

 
JRandomTrader #:

Т.е., это означает, что при частом (только) последовательном переборе лучше использовать однонаправленный список указателей на объекты, чем массив тех же указателей?

 

Почему

Print(StringToTime("0"));

возвращает "2024.04.02 01:00:00", а не "1970.01.01 00:00:00" ?

 
Andrei Iakovlev #:

Почему

возвращает "2024.04.02 01:00:00", а не "1970.01.01 00:00:00" ?

Результат выражения

StringToTime("0")

вычисляется еще на этапе компиляции. А для такого случая действуют следующие правила.

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
  • www.mql5.com
Тип datetime предназначен для хранения даты и времени в виде количества секунд, прошедших с 01 января 1970 года. Занимает в памяти 8 байт...
 
Ihor Herasko #:

Результат выражения

вычисляется еще на этапе компиляции. А для такого случая действуют следующие правила.

Значит

StringToTime("0")

равнозначен 

D''

и должен быть равен __DATETIME__ ?

Но компилировал файл я не "2024.04.02 01:00:00", а сейчас, например "2024.04.02 19:20:02".

А есть случай, в котором StringToTime будет возвращать "1970.01.01 00:00:00" ?

 
Andrei Iakovlev #:

А есть случай, в котором StringToTime будет возвращать "1970.01.01 00:00:00" ?

Print((datetime)(int)"0");
Print(StringToTime(NULL));
 
Andrei Iakovlev #:

Значит

равнозначен 

и должен быть равен __DATETIME__ ?

Но компилировал файл я не "2024.04.02 01:00:00", а сейчас, например "2024.04.02 19:20:02".

А есть случай, в котором StringToTime будет возвращать "1970.01.01 00:00:00" ?

Нет, не D'', а D'00:00:00'.

 
fxsaber #:

Значит нет варианта сделать так, чтобы StringToTime возвращал "1970.01.01 00:00:00" с какой-нибудь непустой строчкой?

придётся использовать оператор ?:
 
Andrei Iakovlev #:

Значит нет варианта сделать так, чтобы StringToTime возвращал "1970.01.01 00:00:00" с какой-нибудь непустой строчкой?

придётся использовать оператор ?:

А точно нужна именно строка? У меня как-то не было таких вариантов. Обычно все в int. А в таком случае IntegerToTime(0) работает отлично.

 
Ihor Herasko #:

А точно нужна именно строка? У меня как-то не было таких вариантов. Обычно все в int. А в таком случае IntegerToTime(0) работает отлично.

У меня на экране в OBJ_EDIT висит дата для расчётов индикатора (чтобы я её видел). Когда расчёты выключаю, пишу в объект "0" и дата = 0. Менять цвет текста в объекте не хочу.

И при смене инструмента на графике, если там "0", индикатор при инициализации выдаёт не нулевую дату после StringToTime, а время (неверное) компиляции.

Причина обращения: