OOP, Vorlagen und Makros in mql5, Feinheiten und Anwendungen - Seite 25

 

fxsaber:

Wahrscheinlich werden einige Compiler in solchen Situationen Warnungen ausgeben.

Der Spezifizierer bezieht sich auf eine Referenz, nicht auf das Objekt als Ganzes, alles ist legitim, warum sollte der Compiler fluchen?

 
TheXpert:

der Spezifizierer bezieht sich auf die Referenz, nicht auf das Objekt als Ganzes, alles ist legitim, warum sollte der Compiler fluchen?

Wenn es so wäre, gäbe es hier wahrscheinlich keine Schelte.

void g1( A& ) {}
void g2( const A& ) {}

void OnStart()
{
  const A a;
  
  g1(a); // 'a' - constant variable cannot be passed as reference
  g2(a); // OK
}
 
fxsaber:

Wenn das der Fall wäre, würde man hier wahrscheinlich nicht fluchen.

Da es sich um ein konstantes Objekt handelt, ist es logisch, dass ein konstantes Objekt keine nicht-konstante Referenz haben kann

 
TheXpert:

Da es sich um ein konstantes Objekt handelt, ist es logisch, dass ein nicht-konstantes Objekt keine nicht-konstante Referenz haben kann.

Wie kann ich mich auf ein konstantes Objekt beziehen?

 
fxsaber:

Wie stelle ich einen Bezug zu einem konstanten Objekt her?

void g1( A& ) {}
void g1(const A& ){}
void g2( const A& ) {}

void OnStart()
{
  const A a;
  
  g1(a);
  g2(a);
}

Fügen Sie eine Überlast hinzu.

 
Vladimir Simakov:

Überlastung hinzufügen.

Ist das nicht eine Überlastung bei einer ständigen Verbindung?

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

OOP, Vorlagen und Makros in mql5, Tipps und Tricks

TheXpert, 2020.02.26 15:24

Der Spezifizierer bezieht sich auf die Referenz und nicht auf das Objekt als Ganzes

 
fxsaber:

Ist eine solche Überlastung nicht eine ständige Referenz?

Was wollen Sie tun?

 
fxsaber:

Ist eine solche Überlastung nicht eine Überlastung einer konstanten Referenz?

Wenn Sie wollen, dass der Compiler bei Ihrem ersten Beispiel abstürzt, wird das nicht funktionieren, denn dort ist alles legal: Sie ändern nicht die Objektinstanz per Referenz, sondern die Objektinstanz, für die die Methode aufgerufen wird, und die Tatsache, dass es sich um dasselbe Objekt handeln kann, ist nicht das Problem des Compilers, sondern das Problem des Programmierers.

Bei einer Klasse können Sie diesen Trick anwenden (bei einer Struktur nicht):

class A
{
  int i;
public:
  void f( const A &Value )  
  {
    Print(Value.i); // 0
    
    if (&this!=&Value) this.i = Value.i + 1;
    
    Print(Value.i); // 1
  }
};

void OnStart()
{
  A a;
  
  a.f(a);
}
 
Vladimir Simakov:

Wenn Sie wollen, dass der Compiler Ihr erstes Beispiel zum Absturz bringt, wird er das nicht tun, denn alles dort ist legal.

Es geht nicht um die Legalität, sondern um die Tatsache, dass der Modifikator const nicht garantiert, dass das Objekt unverändert bleibt.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

OOP, Vorlagen und Makros in mql5, Tipps und Tricks

fxsaber, 2020.02.25 22:23

Ich habe noch nie gesehen, dass dieser Ausdruck falsch zurückgibt.
ORDER_TIME_DONE_MSC == DEAL_TIME_MSC

Aus diesem Grund ist es schwierig, Statistiken über die Ausführungszeit von Aufträgen auf der Grundlage der Handelsgeschichte zu führen.

Wenn wir den Wert vonORDER_TIME_SETUP_MSC für Marktaufträge noch vergleichen können, ist er für schwebende Aufträge bedeutungslos.


Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Bibliotheken: MT4Orders

fxsaber, 2020.02.27 09:40

0 - 348806: 00:01:57.311
1 - 348530: 00:01:39.027
2 - 348494: 00:01:15.259
3 - 348406: 00:01:07.671
4 - 348950: 00:01:04.869
5 - 348960: 00:01:02.888
6 - 348814: 00:01:00.654
7 - 348392: 00:01:00.642
8 - 348508: 00:00:54.515
9 - 348550: 00:00:54.467


Bis zu zwei Minuten Ausführung auf einem laufenden Konto. Teilen Sie Ihre Statistiken hier. Das Skript verwendet keine Bibliotheken, es ist für Netting/Hedging geeignet.