Ошибки, баги, вопросы - страница 2208
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Знаменитый вопрос на собеседовании.
Что будет в i ?
MQL5 выдает 12. MS Visual Studio выдает 13.как и в с++ вроде работает. Вот я и спросил, решил с++ почитать, например. Тоже самое значение на единицу просто в разница. Оно же вроде во втором случае "у" присваивает 5 а потом добавляет, а в первом примере сначала добавляет, а по том присваивает (долго соображал как это работает =D )
в mql5 это равнозначные операции, в с++ разные, ниже вам привели как раз пример теста по с++ ))
Знаменитый вопрос на собеседовании.
Что будет в i ?
MQL5 выдает 12. MS Visual Studio выдает 13.Не определено из-за сайд-эффекта. В данном случае - вообще тройного. Разные оптимизации могут по-разному вычислять значения переменных. Ради оптимизации.
в mql5 это равнозначные операции, в с++ разные, ниже вам привели как раз пример теста по с++ ))
Откуда дровишки? Вы сравнивали результаты операций array[++i]=i и array[i++]=i?
Вопрос на засыпку. Чем отличается постфиксная операция от префиксной операции?
Знаменитый вопрос на собеседовании.
тупой, ненужный вопрос, который выявляет только то, знает ли собеседуемый что такое UB. и мало относится к теме обсуждения.
Aleksey Rodionov:
Сижу и соображаю, как может пригодится код префиксной формы ?
ну вообще-то префиксная форма быстрее. правда сейчас можно не заморачиваться, у компилятора хватает мозгов соптимизировать постфиксную форму когда надо
Откуда дровишки? Вы сравнивали результаты операций array[++i]=i и array[i++]=i?
Вопрос на засыпку. Чем отличается постфиксная операция от префиксной операции?
а при чем тут array[++i]=i и array[i++]=i, как я могу сравнить то, чего не было в беседе...
если есть изменения в mql в рамках возникшего диспута и вы об этом знаете, то как модератор вы обязаны это довести до участников диалога, а не пытаться провести тесты на знания синтаксиса, это в ваши обязанности точно не входит...
и еще, покажите тут всем указания в справке по mql про разницу в постфиксных и префиксных операций, а вот тесты прошлых лет мне говорят о том, что в mql эти операции ранее равнозначны были
ps. кстати специально сейчас проверил пример из диалога
билд 1816 результат == 12
тупой, ненужный вопрос, который выявляет только то, знает ли собеседуемый что такое UB. и мало относится к теме обсуждения.
ну вообще-то префиксная форма быстрее. правда сейчас можно не заморачиваться, у компилятора хватает мозгов соптимизировать постфиксную форму когда надо
Более того, использование подобных конструкций, на мой взгляд, в коде просто недопустимо.
Во-первых, из-за неоднозначности работы на разных реализациях, а еще больше - из-за того, что в таком коде легко допустить ошибку, и непросто разобраться.
Код должен быть прозрачен и понятен с первого взгляда.
Более того, использование подобных конструкций, на мой взгляд, в коде просто недопустимо.
Во-первых, из-за неоднозначности работы на разных реализациях, а еще больше - из-за того, что в таком коде легко допустить ошибку, и непросто разобраться.
Код должен быть прозрачен и понятен с первого взгляда.
просто справку по mql5 уже пора изменить на форму соглашений и правил по языку
а при чем тут array[++i]=i и array[i++]=i, как я могу сравнить то, чего не было в беседе...
если есть изменения в mql в рамках возникшего диспута и вы об этом знаете, то как модератор вы обязаны это довести до участников диалога, а не пытаться провести тесты на знания синтаксиса, это в ваши обязанности точно не входит...
и еще, покажите тут всем указания в справке по mql про разницу в постфиксных и префиксных операций, а вот тесты прошлых лет мне говорят о том, что в mql эти операции ранее равнозначны были
ps. кстати специально сейчас проверил пример из диалога
билд 1816 результат == 12
А при том, что примеры эти ваши - чисто теоретические. Чисто для студентов. Ни один программист в здравом уме не выпустит такое в продакшен.
Постфиксные и префиксные инкремент и декремент реально используются прежде всего в циклах. Они и называются инкремент и декремент!
Вот примеры
и
Если Вы утверждаете, что префиксные и постфиксные операции работают одинаково, то флаг Вам в руки и барабан на шею.
В случае с префиксным инкрементом, вы получите неинициализированным нулевой элемент массива и ошибку array out of range на последней итерации.
PS. Решил перечитать нашу документацю по этому вопросу по зелёной ссылке https://www.mql5.com/ru/docs/basis/operations/mathoperation
Важное замечание
int i=5;
int k = i++ + ++i;
Могут возникнуть вычислительные проблемы при переносе вышеуказанного выражения из одной среды программирования в другую (например, из Borland C++ в MQL5). В общем случае порядок вычислений зависит от реализации компилятора. На практике существуют два способа реализации постдекремента (постинкремента):
В MQL5 в данный момент реализован первый способ вычисления постдекремента (постинкремента). Но даже обладая этим знанием лучше не экспериментировать с использованием данной тонкости.