Особенности языка mql5, тонкости и приёмы работы - страница 249
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я попробовал.
Результат.
Честно говоря, я не понимаю, почему при отсутствии инициализации вторая строка становится нулевой.
Возможно, потому что компилятор делает unrole и сокращает ее до одной строки присваивания...
Замена на MathRand, который по логике никогда не вызывается, делает ненулевое значение. Это еще больше убеждает в верности гипотезы, что ноль - ошибка компилятора.
Тогда это ошибка компилятора.
Замена его на MathRand, который, по логике, никогда не вызывается, дает ненулевое значение. Это еще больше подтверждает гипотезу о том, что ноль - это ошибка компилятора.
Почему?
Почему?
Откуда вы знаете, что она будет инициализирована? Разве она не будет просто заполнена значениями? Или вы подразумеваете это под словом "инициализируется".
А я не знаю, я полагаюсь на доки. Там сказано, что структура должна быть заполнена. А вот если какому-либо полю, в вызываемой функции значение не будет присвоено, то при получении значения этого поля в дальнейшем, получаем UB.
Попробовал.
Результат.
Честно говоря, не понимаю, почему во второй строке получается ноль при отсутствии инициализации.
Это поведение при UB. Так как ты возвращаешь значение поля, то компилятор считает, что ты его инициализировал, единственное место, где ты это делаешь - это
Tick.time = 1;
Соответственно, вся твоя функция сводится оптимизатором к
Это не так. Например, поменяйте местами вызовы Bench1 и Bench2.
Это поведение при UB. Так как ты возвращаешь значение поля, то компилятор считает, что ты его инициализировал, единственное место, где ты это делаешь - это
Соответственно, вся твоя функция сводится оптимизатором к