Ошибки, баги, вопросы - страница 3186

 
Andrey Dik #:

Копирование папки config достаточно, что бы моно было восстановить счета?

Да.

 
fxsaber #:

Да.

Спасибо.

 

Bug MT5 (build 3280) "переоптимизация" вызовов статических методов класса.
Компилятор может выкинуть и не исполнять код целых функций:

class A{
public:
    A(){printf("constructor_a\r\n");}
    static void func(){}
};

A* get_a(){printf("get_a\r\n"); return NULL;}


   
void OnStart()
{ 
   (A()).func();         // missed code from constructor A::A()
   get_a().func();       // missed code from function get_a()
}

С++ онлайн: https://onlinegdb.com/9NUBXaZOZ


UPD: Также с удивлением обнаружил, что в MQL удачно компилируется и это:

void test(){
};

void OnStart(){ 
   ((void*)NULL).test();
} 
 
Sergey Dzyublik #:

Bug MT5 (build 3280) "переоптимизация" вызовов статических методов класса.
Компилятор может выкинуть и не исполнять код целых функций:

Вопрос по синтаксису. Объект создается в первой строке (будет вызван деструктор), но почему компилятор не требует под него переменную?

Сейчас получается, что можно создавать объекты без переменных, прописав всего лишь статический метод-пустышку.


Раньше через макросы такое проделывал, а с таким синтаксисом можно гораздо проще.

class CLASS{
public:
    static void Create(){}    
};

#define MACROS MACROS2(__LINE__)
#define MACROS2(A) CLASS Var##A;
   
void OnStart()
{ 
  // Эти строки идентичны  
  MACROS
  MACROS
  MACROS
  
  // этим.
  (CLASS()).Create();
  (CLASS()).Create();
  (CLASS()).Create();
}
 

Предлагаю дать возможность ПРОГРАММНО отключать/включать горячие клавиши терминала MetaTrader 5.

Сейчас стандартные горячие клавиши не позволяют делать удобные интерфейсы программ. (Удобные = Возможность управлять программой с клавиатуры...)

 
fxsaber #:

Вопрос по синтаксису. Объект создается в первой строке (будет вызван деструктор), но почему компилятор не требует под него переменную?

Это "временный объект" в MQL нужны лишние скобки, чтобы компилятор распознал, а в общем работает как и в С++: https://habr.com/ru/post/186790/

 
fxsaber #:

Вопрос по синтаксису. Объект создается в первой строке (будет вызван деструктор), но почему компилятор не требует под него переменную?

Сейчас получается, что можно создавать объекты без переменных, прописав всего лишь статический метод-пустышку.


Раньше через макросы такое проделывал, а с таким синтаксисом можно гораздо проще.

А почему не так:

CLASS::Create();

Это традиционный способ вызова статических функций.

 
Koldun Zloy #:

А почему не так:

Это традиционный способ вызова статических функций.

Так не создается объект.

 
fxsaber #:

Так не создается объект.

А зачем Вам объект, который сразу же уничтожается?

 
Koldun Zloy #:

А зачем Вам объект, который сразу же уничтожается?

Он уничтожится не сразу, а по выходу из скопа. В частности, это очень удобно при замерах. Использую, например, здесь.

Usage
Usage
  • www.mql5.com
Расчет вычислительной нагрузки - длительность выполнения расчетов от общего времени.
Причина обращения: