mql5语言的特点、微妙之处以及技巧 - 页 210

 
fxsaber #:

我不明白。归零是一个有用的东西,所以它是有意义的。

有ZeroMemory用于归零,而这种 归零一般不能正确工作--这里有例子

 
A100 #:

ZeroMemory是用来归零的,而这种 归零一般都不能正确工作--这里有一些例子

效果很好,我使用它。

 
fxsaber #:

它很好用,我正在使用它。

如果很好,那么为什么这个 例子用F5会挂起,而用ZeroMemory却不会?

为什么在这里--用{}编译,而不是ZeroMemory 编译

 
A100 #:

如果很好,那么为什么这个 例子通过F5挂在那里,而不是通过ZeroMemory?

因为这只是另一个将被修复的错误。

为什么在这里--用{}编译,而不是ZeroMemory 编译?

在这个例子中,{}起作用。

 
fxsaber #:

在这个例子中,{}起作用。

这是一个可以工作的错误,它也将被修复--而且不会被编译

 
A100 #:

这是一个可以工作的错误,它也会被修复 - 而且不会被编译

那么投诉是什么呢?我认为没有理由不在对速度要求很高的地方使用{}-mechanism。

 
fxsaber #:

那么投诉是什么呢?我认为没有理由不在对速度要求很高的地方使用{}-mechanism。

因为一个 "伟大"的机制已经有了两个错误(!)。同时,有一个经过时间考验的替代方案--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
}