Fehler, Irrtümer, Fragen - Seite 1892

 
fxsaber:
Eine andere Frage.
Die Leistung der Lauffläche.
 
Renat Fatkhullin:
Die Arbeit eines Trittes.
wenn es ein Witz ist, ist er lustig )) und wenn nicht, erklären Sie bitte, was eine Lauffläche in der Programmierung ist
 
Konstantin:
bitte erklären Sie, was ein Protektor in der Programmierung ist
die Sache, die die Dekompilierer verschwinden ließ
 
Renat Fatkhullin:

Ja, hier ist ein Beispiel, das Ihre Frage veranschaulicht:

und Ausgabe:

Zuerst prüfen wir den ungelösten Wurf von unten nach oben und erhalten NULL. Das ist richtig.

Dann erstellen wir ein CLASS2-Objekt und weisen seiner Elternklasse eine Referenz darauf zu (hier ist es wichtig zu verstehen, dass die Umgebung dynamisch weiß, dass der ursprüngliche Typ des CLASS2-Objekts in seinen Metainformationen gespeichert ist). Dann (nur Ihre Frage) dynamisch Cast (mit Konvertierung Recht Prüfung auf der Grundlage der Quelle Objekts Metainformationen) von Referenz CLASS1 zu CLASS2.

Wir überprüfen das Ergebnis des Castings und schreiben es in die Variable i = 1. Schließlich geben wir den Wert von i aus, der sich auf das ursprünglich erstellte Objekt bezieht.

Alles funktioniert korrekt und gemäß der Spezifikation (einschließlich der dynamic_cast-Spezifikation in C++ selbst).

Danke für die Klarstellung, die Typumwandlung in MQL ist jetzt einigermaßen klar)) Aber welchen Sinn hat es, dynamic_cast zu erstellen, wenn wir auf keinen Fall von unten nach oben casten können und auf dynamic_cast von oben nach unten verzichten können? Vielleicht gibt es hier einige Feinheiten, die ich nicht verstehe?
 
Konstantin:
Vielen Dank für die Klärung, ich habe es irgendwie in MQL für Typumwandlung)) Aber ich weiß nicht, wozu wir dynamic_cast brauchen, wenn wir sowieso nicht von unten nach oben casten können und wir ohne dynamic_cast von oben nach unten auskommen können? Vielleicht gibt es hier einige Feinheiten, die ich nicht verstehe?

Lesen Sie bitte den Code und meine Erklärung noch einmal.

Außerdem wird demonstriert, wie ein dynamischer Abdruck auf der Grundlage der Metainformationen des ursprünglich erstellten Objekts den Abdruck sicher von unten nach oben erhöhen kann. Wenn ein Objekt aus einem Nachfahren erstellt und dann in einen Verweis auf eine übergeordnete Klasse umgewandelt wurde, können Sie diesen Verweis anhand der Metainformationen (das ursprüngliche Objekt ist tatsächlich ein Nachfahre) sicher in einen Nachfahren umwandeln.

Wird in der Regel verwendet, wenn Objekte verschiedener Nachkommen in einem Array/einer Liste von Verweisen auf die übergeordnete Klasse gestapelt werden und dann abgerufen und sicher auf den einen oder anderen Nachkommen übertragen werden. Wenn die Konvertierung NULL ergibt, bedeutet dies, dass das Objekt nicht von dem Nachfahren abgeholt wird und nicht behandelt werden sollte.

 
Renat Fatkhullin:

Lesen Sie bitte den Code und meine Erklärung noch einmal.

Außerdem wird demonstriert, wie ein dynamischer Abdruck auf der Grundlage der Metainformationen des ursprünglich erstellten Objekts den Abdruck sicher von unten nach oben erhöhen kann. Wenn ein Objekt aus einem Nachfahren erstellt und dann in einen Verweis auf eine übergeordnete Klasse umgewandelt wurde, können Sie diesen Verweis anhand der Metainformationen (das ursprüngliche Objekt ist tatsächlich ein Nachfahre) sicher in einen Nachfahren umwandeln.

Wird in der Regel verwendet, wenn Objekte verschiedener Nachkommen in einem Array/einer Liste von Verweisen auf die übergeordnete Klasse gestapelt werden und dann abgerufen und sicher auf den einen oder anderen Nachkommen übertragen werden. Wenn die Konvertierung NULL ergibt, dann wird das Objekt nicht von descendant abgeholt und muss nicht verarbeitet werden.

Ich habe den Code gelesen, aber ist das nicht:

CLASS2 *my_ptr2=dynamic_cast<CLASS2 *>(my_ptr);

ist nicht vergleichbar mit dem hier:

CLASS2 *my_ptr2=(CLASS2*)my_ptr;

Ich kann nicht begreifen, die sehr Subtilität der Verwendung von dynamic_cast, außer dass bei der Ausführung von Code mit dynamic_cast wir nicht einen Fehler erhalten, weil dynamic_cast gibt NULL im Falle eines Fehlers

 
Konstantin:

Ich habe den Code gelesen, aber ist das nicht:

ist dem hier nicht ähnlich:

Ich kann die Feinheiten der Verwendung von dynamic_cast nicht verstehen, außer dass wir bei der Ausführung von Code mit dynamic_cast keinen Fehler erhalten, da dynamic_cast im Falle eines Fehlers NULL zurückgibt

Ich empfehle, C++ dymanic_cast Spezifikation auf Google zu lesen.

Das ist eine Bagatelle.

 
Bei der Ausgabe von PC-Ressourcen kommt es zu Abstürzen beim Starten des Spiels - das Spiel"Call of Duty: BlackOpsIII" stürzt ab - 1 Agent war beteiligt. Die Agentenpriorität war minimal - der Speicherverbrauch betrug 3,5 Gigabyte von 16 - im Allgemeinen sollte es keine Probleme geben. Mit nicht aktiven Agenten lief das Spiel gut. Haben Sie jemals die Kompatibilität von Agenten mit anderen Programmen getestet?
 
-Aleks-:
Bei der Vergabe von PC-Ressourcen kommt es zu Abstürzen beim Spielstart - Spiel"Call of Duty: BlackOpsIII" stürzt ab - 1 Agent war beteiligt. Die Agentenpriorität war minimal - der Speicherverbrauch betrug 3,5 Gigabyte von 16 - im Allgemeinen sollte es keine Probleme geben. Mit nicht aktiven Agenten lief das Spiel gut. Generell auf die Kompatibilität von Agenten mit anderen Programmen getestet?

Aus irgendeinem Grund dachte ich sofort, dass vielleicht der Fehler im Spiel und verband es mit den Besonderheiten der Arbeit auf 64-Bit-Maschinen, wenn das Programm in den Adressraum geladen wird > 4 GB
 
Sergey Dzyublik:

Aus irgendeinem Grund kam sofort die Idee, dass vielleicht ein Fehler im Spiel und verband es mit den Besonderheiten der Arbeit auf 64-Bit-Maschinen, wenn das Programm in den Adressraum geladen wird > 4 GB

D.h. um diese Hypothese zu überprüfen, muss ich mehr als 4 Gigabyte RAM füllen und das Spiel starten - ich werde es versuchen, wenn mein Sohn es spielt.