Fehler, Irrtümer, Fragen - Seite 1768

 
fxsaber:
Dies ist nur in einem dummen Compiler möglich. Sie wissen es selbst.
Der C++-Compiler wird das nicht für Sie erledigen.
#include <iostream>
using namespace std;
struct S
{
    S operator +(const S&) {cout << "operator +\n"; return S{};}
};
S operator ""_s(const char*, size_t) {cout << "literal operator\n"; return S{};}
int main()
{
    cout << "___literal concatenation example___\n";
    S s = "sd"_s "sf"_s;
    cout << "___operator+ example___\n";
    S s2 = "sd"_s + "sf"_s;
}
Das Ergebnis:
Beispiel für wörtliche Verkettung___
Literaloperator
___Operator+ Beispiel___
Literaloperator
Literaloperator

Betreiber +

Wie Sie sehen können, wurde der Operator+ im zweiten Fall nicht durch die Verkettung ersetzt (erstellt für ein Literal mit anschließender Laufzeitaddition). Der Compiler kann sie einfach nicht herausschneiden, weil der Programmierer zu viele Möglichkeiten hat, was die Möglichkeiten der Optimierung stark einschränkt. Das ist natürlich nicht MKL, es kann anders sein, aber schon die Aussage: "ein normaler Compiler wird alles für mich tun" ist falsch.
 
pavlick_:
Dies ist natürlich nicht MQL, es kann anders sein, aber die Aussage "ein normaler Compiler wird alles für mich tun" ist falsch.
Nun, da es in MQL keine solchen Operatoren gibt, ist es logisch, dass keine Funktionen mit ihnen verbunden sind. Ich werde mich nicht über die Compiler streiten, denn ich bin kein Programmierer. Ich kenne mich nur ein wenig mit MMS aus.
 

Sie sind es leid, Zeit und Geld zu verschwenden: Der Optimierer hängt am letzten Durchgang. Die Agenten tun nichts, alles befindet sich im Genehmigungsstadium. Im Logbuch ist es still. Es macht keinen Sinn, Agenten zu aktivieren/deaktivieren, denn nach einem Neustart der Optimierung beginnt alles von vorne.

Wer hat dieses Problem schon einmal gehabt? Wie kann man sie bekämpfen?

Dateien:
opt1.png  44 kb
opt2.png  96 kb
opt3.png  88 kb
 

Magische Linie

Abfolge der Operationen in MetaEditor\1495 bei einer Bildschirmauflösung von 1024x768 :

  • Öffnen Sie die angehängte Datei
  • Bewegen Sie den horizontalen Schieberegler ganz nach rechts (wie auf dem Bild)
  • In der 3. Zeile klicken Sie auf /*12345*/
Weitere Einstellungen: Service/Einstellungen/Allgemein/Tabellierung 4 Zeichen
Dateien:
Test.mq5  2 kb
 

Beim Versuch, eine Zeichenkette mit StringToInteger() in eine Zahl umzuwandeln, wird, wenn die Zeichenkette keine Zahl enthält, ohne Fehler 0 zurückgegeben (GetLastError() = 0). Wenn die Eingabeparameter eine Zeichenkette enthalten und der Benutzer die Werte falsch angegeben hat, gibt die Funktion einen falschen Wert und keinen Fehler zurück. Das ist schlecht.

Wenn die Zeichenkette eine falsche Zahlendarstellung enthält, z. B. 5o (statt 50), gibt die Funktion den Wert 5 zurück, ohne einen Fehler zu erzeugen. Nicht nur, dass es nicht 0 ist, sondern die Funktion bricht die Zeichenkette als 5, was wiederum falsch ist.

Bitte, liebe Entwickler, verbessern Sie die Funktion und fügen Sie Fehlercodes hinzu, oder geben Sie, wenn die Zeichenkette nicht geparst werden kann, den Wert LONG_MAX + Fehler zurück, damit wir feststellen können, was falsch ist. Sie können es jetzt nicht tun.

Überprüfung des Skriptcodes:

#property version   "1.00"
#property script_show_inputs
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input string value="05";
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   const long iValue=StringToInteger(value);
   Print("iValue = ",iValue,", lastError = ",GetLastError());
  }
//+------------------------------------------------------------------+
 

Implementieren Sie Ihre eigene Version der Funktion - es sollte nicht länger als 10 Minuten dauern.

Wir werden das Verhalten der Systemfunktionen nicht ändern.

 
Renat Fatkhullin:

Implementieren Sie Ihre eigene Version der Funktion - es sollte nicht länger als 10 Minuten dauern.

Wir werden das Verhalten der Systemfunktionen nicht ändern.

Sie halten es also nicht für notwendig, Funktionen zu verfeinern, insbesondere Funktionen, die offensichtlich lügen können?

Selbst wenn wir nur Fehlercodes hinzufügen würden, wäre das in Ordnung, aber jetzt schlagen Sie vor, dass wir das Rad neu erfinden. Natürlich kein kompliziertes, sondern ein Fahrrad.

 
Alexey Kozitsyn:

Sie halten es also nicht für notwendig, Funktionen zu verfeinern, insbesondere Funktionen, die offensichtlich lügen können?

Selbst wenn Sie nur Fehlercodes hinzufügen würden, wäre das gut, aber jetzt schlagen Sie vor, das Rad neu zu erfinden. Natürlich kein kompliziertes, sondern ein Fahrrad.

Sie müssen nicht verfeinert werden, sie sind vollständige Analoga von wtoi/atoi. Die Frage ist abgeschlossen.
 

Kompilierungsfehler

#include <Math\Stat\Math.mqh>
struct S {};
 
Hallo, könnten Sie mir bitte sagen, ob es möglich ist, einen "Periodenseparator" in Metatrader einzustellen? Ich möchte nur in der Lage sein, zu sehen, wo die 15, 30 und Stundenkerzen auf m5 enden, so dass ich nicht immer auf die Zeit schauen muss, wie kann ich das tun?