Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 210

 
fxsaber #:

Das verstehe ich nicht. Die Nullstellung ist eine nützliche Sache, daher ist sie sinnvoll.

Für das Nullsetzen gibt es ZeroMemory, und dieses Nullsetzen funktioniert im Allgemeinen nicht korrekt - hier einige Beispiele

 
A100 #:

ZeroMemory dient zum Nullsetzen, und dieses Nullsetzen funktioniert im Allgemeinen nicht korrekt - hier einige Beispiele

Funktioniert großartig, ich benutze es.

 
fxsaber #:

Funktioniert prima, ich benutze es.

Wenn das so ist, warum hängt dieses Beispiel mit F5, aber nicht mit ZeroMemory?

Und warum hier - es kompiliert mit {} abernicht mitZeroMemory?

 
A100 #:

Wenn das so ist, warum bleibt dieses Beispiel dann über F5 hängen, aber nicht über ZeroMemory?

Denn es ist nur ein weiterer Fehler, der behoben werden wird.

Und warum hier - es kompiliert mit {} abernicht mitZeroMemory

In diesem Beispiel funktioniert {}.

 
fxsaber #:

In diesem Beispiel funktioniert {}.

Es ist ein Fehler, der funktioniert, und er wird auch behoben werden - und er wird nicht kompiliert

 
A100 #:

Es ist ein Fehler, der funktioniert, und er wird auch behoben werden - und er wird nicht kompiliert

Worüber also beschweren Sie sich? Ich sehe keinen Grund, den {}-Mechanismus nicht an geschwindigkeitskritischen Stellen zu verwenden.

 
fxsaber #:

Worüber also beschweren Sie sich? Ich sehe keinen Grund, den {}-Mechanismus nicht an geschwindigkeitskritischen Stellen zu verwenden.

Dennein "großartiger" Mechanismus hat bereits zwei Fehler (!) gehabt. Gleichzeitig gibt es eine bewährte Alternative - ZeroMemory, die ebenfalls schneller ist (zumindest über F5). Die Wahl liegt auf der Hand

 
A100 #:

Dazu kommt, dass der"großartige" Mechanismus bereits zwei Fehler im laufenden Betrieb (!) hatte.

Diese Fehler haben nichts mit dem Kampfeinsatz zu tun.

Es gibt jedoch eine bewährte Alternative, ZeroMemory, die ebenfalls schneller ist (zumindest über F5). Die Wahl liegt auf der Hand

Ich denke, es ist keine Frage, welcher der folgenden Einträge prägnanter und logischer ist.

int i = 0;

int j;
j = 0;

Bei Arrays ist es ähnlich.

 
fxsaber #:

Diese Fehler haben nichts mit dem Kampfeinsatz zu tun.

Ich denke, es steht außer Frage, welcher der folgenden Einträge der prägnantere und logischere ist.

Das Gleiche gilt für Arrays.

Hier ist der dritte Fehler (und wie viele andere es gibt) auf einmal (!):

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 );
}

Ergebnis: false - d.h. die Nullstellung findet nicht statt (!).

Aber mit ZeroMemory

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

Ergebnis: true - alles in Ordnung - vollständiger Nullabgleich

Sie haben natürlich das Recht , Lotto zu spielen und einen lakonischen Eintrag (1 Zeile weniger) anstelle eines offensichtlich korrekten Eintrags zu verwenden

 
A100 #:

Und mit ZeroMemory

Ergebnis: true - alles OK - vollständiger Nullabgleich

struct MqlTick2 : private MqlTick {};

void OnStart()
{
  MqlTick2 Ticks[4] = {}; // OK
  
  ZeroMemory(Ticks); // 'Ticks' - not allowed for objects with protected members or inheritance
}