Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
не прокатило :)
А должно?
Вообще, случай неопределённый, так как переменная CurRow участвует сразу и справа (неявно), и слева. Множественные инкременты и декременты (пре и пост) в одном выражении, либо неоднократное использование изменяемой переменной (этот самый случай) в одном выражении сильно зависят от реализации компилятора. Скажем, в стандарте C++ такие случаи не определены и отданы на откуп реализации.
Классика. Чему равно i после выполнения выражения?
i = i++ + ++i;
Или немножко попроще случай
i = i++;
Так, стоп. В MQL5 есть UB? Тогда почему вы об этом молчите?
1. Не молчим. Просто как-то вопросов не возникало.
2. У нас в языке это вполне определено
1. Не молчим. Просто как-то вопросов не возникало.
Ок, вопросы:
В каком порядке происходит вычисление параметров функции?
В каком порядке происходит вычисление операндов?
Ну по крайней мере на 100% они определены или нет? Потому как в С++ оптимизация довольно сильно влияет.
Ну и если есть UB, озвучьте их, пожалуйста, натыкаться на недокументированные ограничения это нехорошо, но после 4ки привычно уже как-то.
А вот словить неописанную неоднозначность в поведении... Это возможный вынос мозга.
Неоднозначность в поведении возникает только в мозгу. Когда предполагаешь одно (исходя из своего опыта с каким-то конкретным компилятором), а получаешь другое. В случае с инкрементом-декрементом в документации ясно указано
Операция инкремента и декремента применяются только к переменным, к константам не применяются. Префиксныe инкремент (++i) и декремент (--k) применяются к переменной непосредственно перед использованием этой переменной в выражении.
Постфиксные инкремент (i++) и декремент (k--) применяются к переменной сразу после использования этой переменной в выражении.
То есть, читать буквально. В случае i=3; i=i++; i останется равным 3, потому что сначала присвоение в темповую переменную, потом сразу же постинкремент, потом присвоение темповой переменной. Это, конечно же, мы добавим в справку (там и пример-то оказался скопипащенным)
1. Вычисление параметров функции происходит справа налево (в документации написано неверно, спасибо за замечание)
2. Вычисление операндов - слева направо (то есть сначала вычисляется первый операнд, потом -второй). Однако 2+2*2 не будет равно 8, так как по приоритету операций сначала будет умножение первого операнда на второй, потом только сложение самого первого операнда с результатом умножения (который становится вторым операндом)
UB у нас нет. Есть неосвещённые моменты, которые надо отыскать. В том числе с помощью выше заданных вопросов.
Неоднозначность в поведении возникает только в мозгу.
Ну... В вашем же примере i = i++ + ++i. Может получиться разный результат на дебаге и релизе, это уже не в мозгу, а непосредственно в коде, такое надо знать и учитывать.
UB у нас нет. Есть неосвещённые моменты, которые надо отыскать. В том числе с помощью выше заданных вопросов.
Фух, отлегло :) .
Ну... В вашем же примере i = i++ + ++i. Может получиться разный результат на дебаге и релизе, это уже не в мозгу, а непосредственно в коде, такое надо знать и учитывать.
Не надо так писать. За такое - расстрел сроком на 5 лет. Каждый день до смерти.
А должно?
Вообще, случай неопределённый, так как переменная CurRow участвует сразу и справа (неявно), и слева. Множественные инкременты и декременты (пре и пост) в одном выражении, либо неоднократное использование изменяемой переменной (этот самый случай) в одном выражении сильно зависят от реализации компилятора. Скажем, в стандарте C++ такие случаи не определены и отданы на откуп реализации.
Ну согласный я. Никаких претензий нету. Чисто описал наблюдаемую феноменологию. :)
Да не, не должно. Хотя было б прикольно, если б сработало :) Лично я пробовал на полном серьёзе. Прям расстроился, кода получил l-value required :)
Ну согласный я. Никаких претензий нету. Чисто описал наблюдаемую феноменологию. :)
На самом деле, в результате этого обсуждения будет уточнена документация по MQL5