Fehler, Irrtümer, Fragen - Seite 2208

 

Die berühmte Frage im Vorstellungsgespräch.

Was wird im i stehen?

int i = 5;
i = i++ + ++i;
MQL5-Ausgaben 12. MS Visual Studio-Ausgaben 13.
 
Aleksey Rodionov:

wie es in C++ zu funktionieren scheint. Deshalb habe ich gefragt und beschlossen, zum Beispiel C++ zu lesen. Gleicher Wert um eins nur in der Differenz. Im zweiten Fall scheint es "y" 5 zuzuweisen und dann zu addieren, während es im ersten Beispiel erst addiert und dann zuweist (ich habe lange gebraucht, um herauszufinden, wie es funktioniert =D )

In mql5 sind sie gleiche Operationen, in c++ sind sie unterschiedlich, unten haben Sie gerade ein Beispiel eines Tests auf c++ ))

 
. ... Rick D. ... .:

Die berühmte Frage im Vorstellungsgespräch.

Was wird im i stehen?

MQL5 vergibt 12. MS Visual Studio vergibt 13.

Unbestimmt wegen der Nebenwirkung. In diesem Fall handelt es sich um einen dreifachen Effekt. Verschiedene Optimierungen können variable Werte unterschiedlich berechnen. Aus Gründen der Optimierung.

 
Konstantin:

In mql5 sind sie äquivalente Operationen, in c++ sind sie unterschiedlich, unten haben Sie nur ein Beispiel für einen c++-Test erhalten))

Woher haben Sie es? Haben Sie die Ergebnisse der Operationen array[++i]=i und array[i++]=i verglichen?

Hier ist ein Rätsel für Sie. Was ist der Unterschied zwischen Postfix- und Präfix-Operationen?

 
. ... Rick D. ... .:

Eine berühmte Frage in einem Vorstellungsgespräch.

Eine dumme, unnötige Frage, die nur verrät, ob der Befragte weiß, was UB ist, und wenig mit dem Thema der Diskussion zu tun hat.

Aleksey Rodionov:
Ich sitze hier und überlege, wie der Code des Präfix-Formulars nützlich sein kann.

Der Compiler hat genug Grips, um die Postfix-Form bei Bedarf zu optimieren.

 
Slava:

Woher haben Sie den Input? Haben Sie die Ergebnisse der Operationen array[++i]=i und array[i++]=i verglichen?

Hier ist eine rätselhafte Frage. Was ist der Unterschied zwischen Postfix- und Präfix-Operationen?

was hat array[++i]=i und array[i++]=i damit zu tun, wie kann ich vergleichen, was nicht im Gespräch war...

Wenn es im Rahmen des Disputs einige Änderungen in mql gibt und Sie davon wissen, dann sind Sie als Moderator verpflichtet, die Teilnehmer des Dialogs zu informieren, anstatt zu versuchen, die Syntax-Wissenstests zu machen, das ist definitiv nicht Ihre Aufgabe ...

und zeigen darüber hinaus alle Anweisungen in der mql-Hilfe über den Unterschied zwischen Postfix- und Präfix-Operationen, aber die Tests der vergangenen Jahre zeigen, dass diese Operationen in mql gleichwertig sind

ps. übrigens, ich habe gerade das Beispiel aus dem Dialog überprüft

int i = 5;
i = i++ + ++i;

bauen 1816 Ergebnis == 12

 
TheXpert:

Dies ist eine dumme, unnötige Frage, die nur verrät, ob der Befragte weiß, was UB ist, und wenig mit dem Thema des Gesprächs zu tun hat.

Nun, eigentlich ist die Präfixform schneller.

Außerdem bin ich der Meinung, dass die Verwendung solcher Konstrukte in Ihrem Code einfach inakzeptabel ist.

Erstens wegen der Mehrdeutigkeit der Arbeit in verschiedenen Implementierungen und mehr noch, weil es leicht ist, einen Fehler in einem solchen Code zu machen und nicht so leicht, ihn zu verstehen.

Der Code sollte transparent und auf einen Blick verständlich sein.

 
Georgiy Merts:

Außerdem ist es meiner Meinung nach einfach inakzeptabel, solche Konstrukte im Code zu verwenden.

Erstens wegen der Mehrdeutigkeit der Arbeit an verschiedenen Implementierungen, und noch mehr - weil es leicht ist, einen Fehler in solchen Code zu machen, und nicht leicht zu verstehen.

Der Code sollte transparent und auf einen Blick verständlich sein.

es ist an der Zeit, die mql5-Hilfe in Form von Sprachkonventionen und Regeln zu ändern

 
Bitte um Ratschläge zur teilweisen Schließung von Positionen, Kontotyp RETAIL_HEDGING. Wenn ich beispielsweise die Hälfte einer Position im Expert Advisor schließe, sollte automatisch eine neue Order mit einem kleineren Lot eröffnet werden. Zu welchem Zeitpunkt ist der neue Auftrag also garantiert im Terminal? Verstehe ich das richtig, dass es nicht sofort nach dem PositionClosePartial erscheinen muss, sondern irgendwo in OnTrade abgefangen werden muss?
 
Konstantin:

Was hat array[++i]=i und array[i++]=i damit zu tun, wie kann ich vergleichen, was in dem Gespräch nicht passiert ist...

Wenn es im Rahmen des Disputs eine Änderung in mql gibt und Sie davon wissen, dann sind Sie als Moderator verpflichtet, dies den Teilnehmern des Dialogs mitzuteilen, anstatt zu versuchen, Tests über die Syntaxkenntnisse durchzuführen, das ist definitiv nicht Ihre Aufgabe...

und zeigen darüber hinaus alle Anweisungen in der mql-Hilfe über den Unterschied zwischen Postfix- und Präfix-Operationen, aber die Tests der vergangenen Jahre zeigen, dass diese Operationen in mql gleichwertig sind

ps. übrigens, ich habe gerade das Beispiel aus dem Dialog überprüft

bauen 1816 Ergebnis == 12

Aber Ihre Beispiele sind rein theoretisch. Sie sind nur für Studenten bestimmt. Kein Programmierer, der bei Verstand ist, würde sie für die Produktion freigeben.

Postfix- und Präfix-Inkrement und -Dekrement werden eigentlich vor allem in Schleifen verwendet. Und die heißen Inkremente und Dekremente!

Hier sind einige Beispiele

int i=0;
while(i<ArraySize(array))
   array[i++]=i;

и

int i=0;
while(i<ArraySize(array))
   array[++i]=i;

Wenn Sie behaupten, dass Präfix- und Postfix-Operationen gleich funktionieren, dann schlagen Sie die Fahne in die Hände und trommeln auf den Hals.

Im Falle eines Präfix-Inkrements erhalten Sie bei der letzten Iteration ein nicht initialisiertes Null-Array-Element und einen Array-Out-of-Range-Fehler.


PS. Ich habe beschlossen, unsere Dokumentation zu diesem Thema unter dem grünen Link https://www.mql5.com/ru/docs/basis/operations/mathoperation erneut zu lesen.

Wichtiger Hinweis

int i=5;
int k = i++ + ++i;

Es kann zu Berechnungsproblemen kommen, wenn Sie den obigen Ausdruck von einer Programmierumgebung in eine andere portieren (zum Beispiel von Borland C++ zu MQL5). Im Allgemeinen hängt die Reihenfolge der Berechnungen von der Implementierung des Compilers ab. In der Praxis gibt es zwei Möglichkeiten der Umsetzung von Postdecrement (Postincrement):

  1. postdecrement (postincrement) wird auf die Variable angewendet, nachdem der gesamte Ausdruck berechnet wurde;
  2. postdecrement (postincrement) wird auf die Variable unmittelbar am Ort der Operation angewendet.

In MQL5 implementieren wir derzeit die erste Methode zur Berechnung des Postdecrements (Postincrements). Aber selbst mit diesem Wissen ist es besser, nicht mit diesem Trick zu experimentieren.

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Операция инкремента и декремента применяются только к переменным, к константам не применяются. Префиксныe инкремент (++i) и декремент (--k) применяются к переменной непосредственно перед использованием этой переменной в выражении. Могут возникнуть вычислительные проблемы при переносе вышеуказанного выражения из одной среды программирования в...