Особенности языка mql5, тонкости и приёмы работы - страница 160
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
NULL такая неопределённость, что с ней надо внимательно разбираться.
Еще раз, input-строка не может быть NULL (принудительно делается ""). Остальные строки - могут.
Еще раз, input-строка не может быть NULL (принудительно делается ""). Остальные строки - могут.
Еще раз, input-строка не может быть NULL (принудительно делается ""). Остальные строки - могут.
Опять-же почему вы считаете, что такое преобразование не должно быть? Чтобы всё это объяснить моих знаний и опыта не хватает. Потому оставайтесь при своём мнении. Надеюсь разработчики не пойдут на поводу и не станут менять это.
Опять-же почему вы считаете, что такое преобразование не должно быть?
Отлично знаю, почему такое преобразование происходит. Здесь речь об особенности, а не о баге.
input - почти синоним const, const должен быть инициализован
NULL - инициализация. Специально же в примере показана не input-строка.
Хорошо бы предупреждение генерировать на этапе компиляции.
Да, наверное, такое поведение - просто "защита от дурака".
Видно, ввиду того, что input переменная должна быть проинициализирована, то в инпут = NULL исскуственно приравнивается к ="", когда переменная уже занимает хотя бы один байт в памяти.
В MQL5 записи:
абсолютно идентичны. Памяти под переменную не выделяется. Во всяком случае я не нашел различий.
А в java, например, такие записи имеют небольшое различие, не смотря на то, что в обоих случаях тоже не выделяется памяти под переменную. Первый вариант (String str = null;) будет считаться проинициализированным, хотя памяти под переменную не выделяеся, и переменную можно распечатать как пустую. А во втором случае(String str;) при попытке печати переменной будет генерироваться ошибка о непроинициализированной переменной.
Т.е. MQL5 в этом плане более толерантный.
Что лучше, даже не знаю.
Видно, ввиду того, что input переменная должна быть проинициализирована, то в инпут = NULL исскуственно приравнивается к ="", когда переменная уже занимает хотя бы один байт в памяти.
NULL - это не инициализация, а значение. Вы можете любой non-const string-переменной присвоить NULL в середине кода. И она будет равна NULL.
input не равна NULL, потому что при запуске создается невидимый set-файл. И из этого файла "парсингом" идут значения переменных в input-ы. Ну а парсинг ни при каком раскладе не может выдать NULL, поэтому помещает туда пустую строку.
Такое поведение только у input-string. Для const-string и остальных - все в норме, конечно.NULL - это не инициализация, а значение. Вы можете любой non-const string-переменной присвоить NULL в середине кода. И она будет равна NULL.
input не равна NULL, потому что при запуске создается невидимый set-файл. И из этого файла "парсингом" идут значения переменных в input-ы. Ну а парсинг ни при каком раскладе не может выдать NULL, поэтому помещает туда пустую строку.
ну так я о том же. Я согласен.
Единственное, что в присвоении стрингу значения NULL на этапе объявления переменной нет никакого смысла:
имеет смысл это делать только для обнуления уже проинициализированной переменной в памяти.
ну так я о том же. Я согласен.
Единственное, что в присвоении стрингу значения NULL на этапе объявления переменной нет никакого смысла:
имеет смысл это делать только для обнуления переменной в памяти.
Здесь NULL-инициализация имеет смысл.
Здесь NULL-инициализация имеет смысл.
да