Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я там уже дополнил свой пост. Он может принимать указатель на любой объект, хоть на константный, хоть нет.
Вроде, функции f показывают, что и как могут менять. Собственно, дискутировать по этому поводу - пустое. Вы правы, что уничтожение базы СД - большое зло.
С трудом выкопал баг, благо на форум постил. Он, похоже, объясняет причину. Очень много сигнатур на самом деле формируется.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2017.04.10 16:23
Создание лишних template-перегрузок, которые приводят к ошибкам компиляцииКомпилятор зачем-то пытается создать
С трудом выкопал баг, благо на форум постил. Он, похоже, объясняет причину. Очень много сигнатур на самом деле формируется.
Я там уже дополнил свой пост
Сейчас понял, что изначально я всё верно написал.
Давайте тогда, чтоб ни у кого не возникало путаницы, разложим по полочкам все варианты шаблонов:
T - принимает тип любой переменной (указателя) по значению. Внутрь функции передаётся тот же самый тип.
const T или T const - то же самое, что и выше, только внутри функции переменная становится константой
T& - принимает любую переменную (указатель) по ссылке
const T& или T const& - Принимает константу (константный указатель) по ссылке.
T* - принимает любой указатель на любой тип объекта по значению
T*const - то же самое, что и выше, только внутри функции указатель становится константой
T*& - принимает любой указатель на любой тип объекта по ссылке
T*const& - принимает константный указатель на любой тип объекта по ссылке
const T* или T const* - принимает любой указатель на константный объект по значению
const T*const или T const*const - то же, что и выше, только внутри функции этот указатель становится константой
const T*& или T const*& - принимает любой указатель на константный объект по ссылке
const T*const& или T const*const& - принимает константный указатель на константный объект по ссылке
По крайней мере это правила, работающие в C++.
Обычный тип переменной естественно может приводиться в константному, кроме тех случаев, когда шаблон перегружен для соответствующего константного типа. В таких случаях константы идут в константный шаблон, а переменные - в обычный шаблон.
p.s. Как можно заметить, при передаче по значению, const относящийся к типу аргумента никак не влияет на поведение шаблона. Равно как и в обычных функциях. Этот const имеет значение лишь внутри функции. Т.е. T и const T (или T const) - равнозначны по сути.
Сейчас понял, что изначально я всё верно написал.
Давайте тогда, чтоб ни у кого не возникало путаницы, разложим по полочкам все варианты шаблонов:
Вроде, логично поместить это в ветку.
Для полноты картины дополнил бы описание объяснением такого случая
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2016.10.23 23:52
Наткнулся у себя на хороший пример{
public:
void operator =( const string Value ) const { return; }
void operator =( const int Value ) { return; }
};
void OnStart()
{
const A a;
a = 0; // implicit conversion from 'number' to 'string'
}
Вроде, логично поместить это в ветку.
Да только та ветка называется "Особенности языка MQl5", а как выясняется, в MQL5 пока не всё из перечисленного работает правильно ) Лучше повесить это на стену у разработчиков MQ, как памятку )
Что работает неправильно? Как Вы определили, что работает неправильно? Была какая-то отсылка из нашей документации к стандарту C++?
Зачем весить на стену?
Что работает неправильно? Как Вы определили, что работает неправильно? Была какая-то отсылка из нашей документации к стандарту C++?
Зачем весить на стену?
Ну как бы изначально ведь повелось, что синтаксис MQL стремится соответствовать синтаксису C++.
Вот даже в вашей документации в самом начале сказано:
MQL5 основан на концепции широко распространенного языка программирования С++, по сравнению с MQL4 в нем добавлены перечисления, структуры, классы и обработка событий. Благодаря расширению числа встроенных основных типов, взаимодействие исполняемых программ на MQL5 с другими приложениями посредством dll максимально облегчено. Синтаксис языка MQL5 подобен синтаксису С++, и это позволяет легко переносить на него программы из современных языков программирования.
Поэтому не очень понимаю вас теперь. Через столько лет работы по воссозданию подобия С++ говорить, что это всё неправда?
Тем более, у вас ведь нигде в документации не прописаны правила поведения шаблонов, которые я перечислил выше. И многое-многое другое. Следовательно, мы предполагаем, что эти правила соответствуют C++. Если же же вы теперь заявляете, что они не должны соответствовать, что почему в документации не описаны ваши собственные правила?
Что работает неправильно?
https://www.mql5.com/ru/forum/278274#comment_8636140
Как Вы определили, что работает неправильно?
логика )
Мы работаем над компилятором. И очень внимательно читаем форум.
Но есть нюансы. Например, назовите мне компилятор, который полностью соответствует стандарту C++. Кроме этого, даже в самом стандарте C++ достаточное количество мест, где написано: "зависит от реализации", то есть отдано на откуп компиляторостроителям.
Здесь же, в данной ветке, речь идёт не о переносе программ из C++ в MQL5. И даже не об обычном каждодневном программировании. Речь идёт об экзотических случаях: "смотрите, что я нашёл"
Но есть нюансы. Например, назовите мне компилятор, который полностью соответствует стандарту C++. Кроме этого, даже в самом стандарте C++ достаточное количество мест, где написано: "зависит от реализации", то есть отдано на откуп компиляторостроителям.
в стандарте места отданные на откуп компиляторостроителям называются UB. насколько я понимаю, в шаблонах UB невозможны в принципе, потому что это действия времени компиляции. ошибки в компиляторах конечно есть, но к багрепортам по стандарту все основные компиляторы относятся очень даже серьезно. это раз.
mql сделан на базе C++, поэтому логично, что когда возникают вопросы по поведению, идет обращение к базе. если ваша реализация отличается, то было бы очень круто увидеть эти отличия в каком-то месте, прописанные явно разработчиками явно. Тогда не будет гадания как и что должно работать, не будет таких веток, а если будут, их можно будет решать одной ссылкой на описание работы. это два
вы написали в этой ветке уже два комментария, так может напишете механизм подстановки const и вывода типа с указателями и const в шаблонах как это происходит в MQL? если возьмете в качестве примеров приведенные здесь коды с ошибками, будет вообще великолепно.