Новая версия платформы MetaTrader 5 build 3440: Новый отчет по торговому счету - страница 6
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Исправлено в 3440.
Исправлено в 3440.
Последняя релизная мт5 3440. Что-то перемудрили с const. В прошлой релизной собиралось норм.
Последняя релизная мт5 3440. Что-то перемудрили с const. В прошлой релизной собиралось норм.
собиралось, потому что был баг. теперь его исправили (читайте описание релиза п.10)
Теперь надо так:
void DeleteObject( const T * const & Pointer )
P.S. ну или так void DeleteObject( const T * const Pointer ). (ссылка нужна для массива указателей).собиралось, потому что был баг. теперь его исправили (читайте описание релиза п.10)
Просьба пояснить, в чем была раньше засада?
Теперь надо так:
Вижу, что гибкость потеряна. Ради этого?
Просьба пояснить, в чем была раньше засада?
Вижу, что гибкость потеряна. Ради этого?
Была дыра - можно было неявно и нечевидно переменной типа A* присвоить const A*. Это описано и в форуме и в пресс-релизе.
По вашему примеру: здесь проблема в другом. Есть отличие(недоработка?) MQL от C++.
В C++ шаблон (const T &b) эквивалентен (T const &b) и при получении аргумента вида A*b разворачивается в (A* const &b). поэтому там одного этого шаблона достаточно.
Была дыра - можно было неявно и нечевидно переменной типа A* присвоить const A*. Это описано и в форуме и в пресс-релизе.
Грубо говоря, раньше был хитрый способ сделать такое.
Похоже, туплю. Но концептуально не понимаю, какая потенциальная проблема в таком присваивании?
Грубо говоря, раньше был хитрый способ сделать такое.
Похоже, туплю. Но концептуально не понимаю, какая потенциальная проблема в таком присваивании?
Есть и простой способ сделать то же самое: a=(A*)b;
идея в том, чтобы программист, который заботится о сохрании константности данных, случайно не накосячил. Сходу могу обрисовать 2 области применения:
1. Внутри одного скоупа. Если бы вы в своем примере не инициализировали
const A* b = a;
а создали бы новый объект или инициализировали другим указателем на константу, то в "а" не присвоился бы указатель на *b.
Здесь ответственность программиста, чем инициализирует.
2. При передаче указателя в функцию. Если параметр объявлен как const X*, и надо, допустим, сохранить его значение в локальной переменной, и потом случайно не изменить объект по указателю, то надо объявить эту локальную переменную как const X*.
.. не могу сейчас привести хороших примеров из жизни.
Есть и простой способ сделать то же самое: a=(A*)b;
идея в том, чтобы программист, который заботится о сохрании константности данных, случайно не накосячил. Сходу могу обрисовать 2 области применения:
1. Внутри одного скоупа. Если бы вы в своем примере не инициализировали
а создали бы новый объект или инициализировали другим указателем на константу, то в "а" не присвоился бы указатель на *b.
Здесь ответственность программиста, чем инициализирует.
2. При передаче указателя в функцию. Если параметр объявлен как const X*, и надо, допустим, сохранить его значение в локальной переменной, и потом случайно не изменить объект по указателю, то надо объявить эту локальную переменную как const X*.
.. не могу сейчас привести хороших примеров из жизни.
Спасибо. Понимаю и везде именно для самоконтроля использую const. Очень удобно, когда компилятор подсказывает, что я кое о чем забыл и так то делать было нельзя. Реально подсказывает и плохо понимаю тех, кто const не использует в своем коде.
Видимо, концептуально разное видение этой записи.
Ерунда получается. Нет принципиально неизменяемого объекта.
ЗЫ Весь смысл п.10 обновления рушится такой записью.