Новая версия платформы MetaTrader 5 build 3091: Улучшения в работе - страница 31
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А какие сомнения? Всё правильно, ведь ii1[] = {0}; инициализируется одним значением, соответственно размер массива фиксированный = 1
Если написать так ii1[] = {0, 0}; то будет фиксированный массив размером 2 элемента.
Тогда для чего исправляли чтобы массив при инициализации
оставался динамическим? Это несовпадение поведения при одинаковых условиях, и зачем если можно было писать так:
Из справки:
Инициализация переменныхЕсли размер инициализируемого массива не указан, то он определяется компилятором, исходя из размера инициализирующей последовательности.
Получается, что исправление было не верным, массив должен оставаться статическим. В первом случае был нулевой размер, во втором его просто не было.
Тогда для чего исправляли чтобы массив при инициализации
оставался динамическим? Это несовпадение поведения при одинаковых условиях, и зачем если можно было писать так:
Из справки:
Инициализация переменныхЕсли размер инициализируемого массива не указан, то он определяется компилятором, исходя из размера инициализирующей последовательности.
Получается, что исправление было не верным, массив должен оставаться статическим. В первом случае был нулевой размер, во втором его просто не было.
Такая запись меня тоже удивляет, зачем? Но, видимо это на любителя, кто как привык… И тем не менее, это не должно превращать динамический массив в статический…
Такая запись меня тоже удивляет, зачем? Но, видимо это на любителя, кто как привык… И тем не менее, это не должно превращать динамический массив в статический…
Почему не должно? Всё согласно справке. Зачем тут двойственность поведения компилятора? Язык MQL двигался в сторону ужесточения контроля написания кода, раньше вообще можно было заполнять массив без предварительного изменения его размера, всё происходило автоматически.
Почему не должно? Всё согласно справке. Зачем тут двойственность поведения компилятора? Язык MQL двигался в сторону ужесточения контроля написания кода, раньше вообще можно было заполнять массив без предварительного изменения его размера, всё происходило автоматически.
Ну какая-же двойственность? В кривых скобках перечисляются элементы массива… Пустые кривые скобки говорят об отсутствии этих элементов или проще говоря о нулевом размере массива. Что есть кривые скобки без перечня, что их вообще нет, ни какой разницы.
Может разработчики более доступно объяснят. У меня догадок не хватает…
https://www.mql5.com/ru/forum/380278/page28#comment_26154900
https://www.mql5.com/ru/forum/380278/page28#comment_26161754
Спустя 2 обновления:
Интересует массив ii1[], тут именно инициализация массива конкретными значениями
Все верно - вы своей явной инициализирующей последовательностью сами заявили/переопределили ii1 как фиксированный массив.
{0} для динамического массива превращает определение массива в фиксированное из 1 элемента.
{} для динамического массива не имеет смысла/бесполезно и фактически пропускается. Мы убрали явное преобразование(по факту убийство) динамического массива с {} в статический размером 0 элементов. Хотя я бы лучше оставил - это быстрее бы обучило не делать глупостей в коде.
Уважаемые разработчики, при обновлении до 3121 появилась проблема
Вот такой эксперт
При тестировании
Спасибо за пример, разберемся.
Тогда для чего исправляли чтобы массив при инициализации
А какой смысл от пустого статического массива?
А какой смысл от пустого статического массива?
... Хотя я бы лучше оставил - это быстрее бы обучило не делать глупостей в коде.
Я так понимаю ответа на свой вопрос я не дождусь )
Есть простой скрипт
Будучи собранный старой релизной версией 2940 он выдаёт результат 2 2, как и ожидается.
Будучи собранный последней релизной версией 3091 он выдаёт результат 2 4.
Почему?