Особенности языка mql5, тонкости и приёмы работы - страница 210

 
fxsaber #:

Не понял. Обнуление - полезная вещь, поэтому смысл имеется.

Для обнуления есть ZeroMemory, а это обнуление в общем случае неправильно работает - вот примеры

 
A100 #:

Для обнуления есть ZeroMemory, а это обнуление в общем случае неправильно работает - вот примеры

Великолепно работает, пользуюсь.

 
fxsaber #:

Великолепно работает, пользуюсь.

Если великолепно, то почему тогда этот пример через F5 подвисает, а через ZeroMemory нет?

И почему здесь - с {} компилируется, а с ZeroMemory - нет?

 
A100 #:

Если великолепно, то почему тогда этот пример через F5 подвисает, а через ZeroMemory нет?

Потому что это просто очередная ошибка, которую исправят.

И почему здесь - с {} компилируется, а с ZeroMemory - нет

В этом примере {} работает.

 
fxsaber #:

В этом примере {} работает.

Это ошибка что работает и ее тоже исправят - и не будет компилироваться

 
A100 #:

Это ошибка что работает и ее тоже исправят - и не будет компилироваться

Так к чему претензия? Не вижу причин не использовать {}-механизм в критически важных по скорости местах.

 
fxsaber #:

Так к чему претензия? Не вижу причин не использовать {}-механизм в критически важных по скорости местах.

К тому, что у "великолепного" механизма с ходу (!) обнаружились уже две ошибки. При этом есть проверенная временем альтернатива - ZeroMemory, которая к тому же быстрее (по крайней мере через F5). Выбор очевиден

 
A100 #:

К тому, что у "великолепного" механизма с ходу (!) обнаружились уже две ошибки.

Эти ошибки никакого отношения не имеют к боевому применению.

При этом есть проверенная временем альтернатива - ZeroMemory, которая к тому же быстрее (по крайней мере через F5). Выбор очевиден

Думаю, нет вопросов, какая запись лаконичнее и логичнее из следующих.

int i = 0;

int j;
j = 0;

С массивами аналогично.

 
fxsaber #:

Эти ошибки никакого отношения не имеют к боевому применению.

Думаю, нет вопросов, какая запись лаконичнее и логичнее из следующих.

С массивами аналогично.

Вот третья (а сколько их там еще) ошибка сходу (!):

union X {
    int i;
    double x;
};
void OnStart()
{
    X x[10000] = {}; //(*)
    bool b = true;
    for ( int i = 0; i < ArraySize(x) && (b = (x[i].x == 0.0)); i++ );
    Print( b );
}

Результат: false - т.е. обнуления не происходит (!)

А с ZeroMemory

    X x[10000];      //(*)
    ZeroMemory( x ); //(**)

Результат: true - все нормально - полное обнуление

Ну конечно играть в лотереюиспользовать более лаконичную запись (на 1 строку меньше) вместо заведомо правильной - это Ваше право

 
A100 #:

А с ZeroMemory

Результат: true - все нормально - полное обнуление

struct MqlTick2 : private MqlTick {};

void OnStart()
{
  MqlTick2 Ticks[4] = {}; // OK
  
  ZeroMemory(Ticks); // 'Ticks' - not allowed for objects with protected members or inheritance
}
Причина обращения: