Ошибки, баги, вопросы - страница 2045
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Правда я там размерность массива не ту поставил, может это повлияло как-то (хотя не должно никак влиять).
Попробуйте вот с размерностью = 3
Обнаружил причину несоответствия. В режиме OPTIMIZE=0 ошибка есть, а с OPTIMIZE=1 нет. Я обычно всегда только OPTIMIZE=0 пользуюсь
Если нахожу логическое (непротиворечивое) объяснение результату, то не вижу бага. Не считаю, что доказательство бага приемлемо, если результат не совпадает с C++. Это в C++ кто-то так подумал и сделал. А мог и не подумать так и, соответственно, не сделать. Поэтому лучше не ссылаться на что-то там, а основываться на какой-то своей внутренней концепции, как должно быть. И желательно, чтобы "свое" было, действительно, своим. А не результатом незаметного навязывания стереотипов "как надо" по мере набирания опыта программирования.
Если своего объяснения нет то значит и ошибки нет. А если через год появится это объяснение и весьма убедительное - то тогда всем все переделывать??? В С++ там уже сто раз подумали почему так, а не иначе. И объяснение требуется если в MQL что то иначе устроено, чем в С++, а не наоборот
Но никак не функцией.
Тогда нужно запретить статические экземпляры классов - потому что они инициализируются функцией-конструктором
И вот ещё по теме инициализации переменных. Если следовать тому, что было указано в документации, тогда и ссылаться на другие глобальные/статические переменные тоже нельзя. Т.к. это не является константным выражением:
Однако пока это работает. И я полагаю, многие всегда пользовались такими конструкциями, ничего не подозревая. Но выходит что в любой момент разработчики могут отрубить это. И как и в случае с инициализацией функциями, эти коды будут продолжать успешно компилироваться, но станут работать неправильно. В общем, весь MQL - это мина замедленного действия.
И вот ещё по теме инициализации переменных. Если следовать тому, что было указано в документации, тогда и ссылаться на другие глобальные/статические переменные тоже нельзя. Т.к. это не является константным выражением:
инициализируется функцией-конструктором - запретить!
Это если логически обобщить последние сообщения
Обнаружил причину несоответствия. В режиме OPTIMIZE=0 ошибка есть, а с OPTIMIZE=1 нет. Я обычно всегда только OPTIMIZE=0 пользуюсь
В 32-разрядном терминале ошибка при любом OPTIMIZE
инициализируется функцией-конструктором - запретить!
Это если логически обобщить последние сообщения
Ну там просто человек некорректно выразился. Конечно речь идёт об инициализирующем значении, а не о об инициализирующей функции.
Да и бог с ними с запретами. Они сами по себе не несут проблем. Но вот когда этот запрет никак не контролируется компилятором, а вместо этого порождая алгоритм, работающий в обход правил языка, то это вообще ни в какие рамки не лезет. Теперь придётся перелопачивать все коды, выискивая такие моменты, да и вообще постоянно быть настороже. Ну его нафиг такое программирование, лучше останусь на старом билде.
Ясно, тогда прошу прощения, не заметил сразу. Удивительно конечно, как они успели втихаря это поменять, и ничего никому не сказали. Тогда не понятно, почему компилятор никак не реагирует на то, что выполняется недопустимая операция. Т.е. баг в любом случае имеет место
И вот ещё по теме инициализации переменных. Если следовать тому, что было указано в документации, тогда и ссылаться на другие глобальные/статические переменные тоже нельзя. Т.к. это не является константным выражением:
Однако пока это работает. И я полагаю, многие всегда пользовались такими конструкциями, ничего не подозревая. Но выходит что в любой момент разработчики могут отрубить это. И как и в случае с инициализацией функциями, эти коды будут продолжать успешно компилироваться, но станут работать неправильно. В общем, весь MQL - это мина замедленного действия.
Ну... никакого расхождения с описанием в документации в этом примере НЕТ... Внимательно изучите цитату из документации
или константным выражением
Такая инициализация возможна. Потому, что переменная 'а' инициализируется константой, а переменная 'b' инициализируется константным выражением.
Тогда нужно запретить статические экземпляры классов - потому что они инициализируются функцией-конструктором
Обратите внимание на
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Alexey Viktorov, 2017.10.18 09:19
Почему вы думаете что поменяли, почему она недопустимая? Пожалуйста пользуйтесь на своё усмотрение. Вся проблема в том, что при инициализации статической переменной функцией, "приостанавливается" инициализация и выполняется эта функция. А в приведённом примере, в той функции ещё есть статическая переменная которая пока ещё не инициализирована. Отсюда и переменная инициализированная функцией принимает не соответствующее значение.