Функция ArraySetAsSeries() физически не перемещает элементы массива, а только меняет направление индексации задом наперед для организации доступа к элементам как в таймсерии. Функция ArrayReverse() физически перемещает элементы массива таким образом, что массив "переворачивается".
Но этот код доказывает обратное:
MqlRates rt[];
CopyRates(Symbol(), 0, 0, 5, rt);
ArraySetAsSeries(rt, true);
ArrayResize(rt, 6); // добавляет элемент в конец массива//ArraySetAsSeries(rt, true);for (int x = 0; x < ArraySize(rt); x++) {
Print(rt[x].time);
}
Print("=================");
(EURUSD,H1) 2019.12.1302:00:00
(EURUSD,H1) 2019.12.1301:00:00
(EURUSD,H1) 2019.12.1300:00:00
(EURUSD,H1) 2019.12.1223:00:00
(EURUSD,H1) 2019.12.1222:00:00
(EURUSD,H1) 1970.01.0100:00:00 - последний элемент
(EURUSD,H1) =================
MqlRates rt[];
CopyRates(Symbol(), 0, 0, 5, rt);
//ArraySetAsSeries(rt, true);ArrayResize(rt, 6); // добавляет элемент в конец массиваArraySetAsSeries(rt, true);
for (int x = 0; x < ArraySize(rt); x++) {
Print(rt[x].time);
}
Print("=================");
(EURUSD,H1) 1970.01.0100:09:19 - последний элемент
(EURUSD,H1) 2019.12.1302:00:00
(EURUSD,H1) 2019.12.1301:00:00
(EURUSD,H1) 2019.12.1300:00:00
(EURUSD,H1) 2019.12.1223:00:00
(EURUSD,H1) 2019.12.1222:00:00
(EURUSD,H1) =================
А он есть? Точно есть? По какому пути?
Как можно воспроизвести?
Поместить скрипт в Избранное Навигатора.
Скомпилировать ошибочный вариант
Перезагрузить Терминал и попробовать из Избранного выбрать редактирование скрипта.
Разработчики. Пояснение нужно. Чему верить? Докам или реализации? Пока что undefined behavior получается.
@fxsaber, не советую до официальных пояснений юзать, вдруг возьмут и пофиксят.
Документация отстала, поправим
Я не рекомендую инициализировать статические переменные выражениями, если это возможно используйте константу.
Т.к. при использовании неконстантных выражений компилятором генерируется следующий код
Получается оверхед, на каждом вызове будет проверка флага __Implicit_myStaticVar_initialized
Для варианта с константой получится следующий код
Никакого оверхеда нет
Спасибо, теперь понятно с оверхедом.
Результат
... Вопрос в другом. Возможно в MQL5 баг, нужно разобраться, а перенос в тему для начинающих никак не способствует скорому разбору ситуации.
Название темы прочтите пожалуйста.
Название темы прочтите пожалуйста.
И в чем вы увидели противорчие? Описанная ситуация может быть как особенностью языка, так и багом. Это и требовалось выяснить.
И в чем вы увидели противорчие? Описанная ситуация может быть как особенностью языка, так и багом. Это и требовалось выяснить.
Нет. Сначала выясняется баг это или особенность - потом постится именно, и исключительно особенность. Тема - только про особенности.
@Ilyas @Slava @Renat Fatkhullin
В mql есть поддержка не документированных ключевых слов для функций
Есть ли смысл их использовать?
Если да, то в каких случаях компилятор примет их?
В справке ArrayReverse:
Функция ArraySetAsSeries() физически не перемещает элементы массива, а только меняет направление индексации задом наперед для организации доступа к элементам как в таймсерии. Функция ArrayReverse() физически перемещает элементы массива таким образом, что массив "переворачивается".
Но этот код доказывает обратное: