Fehler, Irrtümer, Fragen - Seite 1768
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Dies ist nur in einem dummen Compiler möglich. Sie wissen es selbst.
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;
}
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.Dies ist natürlich nicht MQL, es kann anders sein, aber die Aussage "ein normaler Compiler wird alles für mich tun" ist falsch.
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?
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 ZeichenBeim 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 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.
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.
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.
Kompilierungsfehler
struct S {};