Какой-то бессмысленный пример использования вы привели. Компилятор, скорее всего, и сам оптимизирует данное выражение, если значение text постоянно. Можно дополнительно указать ему const.
не так уж дорого чтобы переносить на время компиляции. кстати далеко не факт что это не делается автоматом
const string s = "12345"; const int s_size = StringLen(s); void OnStart() { Print("s = \"", s, "\", size = ", s_size); }
Тут основной момент в вызове StringLen. В примере с препроцессором, каждое вхождение TEXT_LEN ведет подствновку функции. В случае с constexpr компилятор на стадии компиляции высчитает это значение и далее уже его подставит вместо вызова переменной, проверив заодно на согласование типов данных.
Ещё раз, что мешает просто объявить:
Да ничего не мешает, просто при объявлении const это все таки переменая и обращение к ней будет по адресу памяти.
Да не факт. Компилятор, полагаю, не совсем глупый ) Думаю он всё оптимизирует сам на стадии компиляции.
Вам следовало привести более наглядный пример использования, когда применение constexpr действительно необходимо, например так:
constexpr string text="Много букв"; constexpr int textLen=StringLen(text); int array[textLen];
Да не факт. Компилятор, полагаю, не совсем глупый )
разработчики много где сделали оптимизацию компилятора, думаю, что даже типовые конструкции которые используют юзеры и те учли, вот не давно разбирали https://www.mql5.com/ru/forum/312873
дык даже в МТ4 типовой вызов iCustom() с одинаковыми параметрами тоже оптимизирован - за один вызов индикатора будут получены все данные
#define и все константы всегда на этапе компиляции вычисляются, кто то из админов писал
циклы тоже оптимизированы - тоже писали
по сабжу.... ну вроде штука нужная, но зачем? MQL уже не станет C++, много не соответствий и добавление новых Сиподобных конструкций все равно не позволит портировать С++ коды в 2 клика в MQL, а добавив что то из С++ в MQL всегда вызывает много "почему"
разработчики много где сделали оптимизацию компилятора, думаю, что даже типовые конструкции которые используют юзеры и те учли, вот не давно разбирали https://www.mql5.com/ru/forum/312873
дык даже в МТ4 типовой вызов iCustom() с одинаковыми параметрами тоже оптимизирован - за один вызов индикатора будут получены все данные
#define и все константы всегда на этапе компиляции вычисляются, кто то из админов писал
циклы тоже оптимизированы - тоже писали
по сабжу.... ну вроде штука нужная, но зачем? MQL уже не станет C++, много не соответствий и добавление новых Сиподобных конструкций все равно не позволит портировать С++ коды в 2 клика в MQL, а добавив что то из С++ в MQL всегда вызывает много "почему"
Что касается того, что mql не c++, так то да, но уж очень похож. Убери запрет на указатели примитивных типов и, по крупному, наверное, только множественное наследование останется.
по крупному динамические многомерные массивы нужны, только начинаешь разбирать готовые мат.пакеты на С++ сразу упираешься в отсутствие динамических многомерных массивов
с указателями тож беда... но это объясняют безопасностью языка
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вот для этого:
так сейчас:
,а так станет:
В первом примере эффективнее:
, но каждый раз считать лень, да и типобезопасность добавляется.