Was der Modifikator const nach einer Methodendeklaration bedeutet - Seite 3

 
Es ist nicht ungewöhnlich, dass solche Konstruktionen auch absichtlich verwendet werden:
const TYPE1 Method( const TYPE2 Input ) const;
Und wenn ich nicht nur die internen Daten des Objekts ändere, sondern auch nicht auf sie zugreife, schreibe ich die Methode sofort als statisch. Für mich erhöht die Verwendung von const und static die Lesbarkeit/Verständlichkeit meines eigenen Codes erheblich. Außerdem kann ich auf diese Weise oft schon in frühen Stadien der Implementierung Fehler oder Schwachstellen in meiner eigenen Architektur entdecken.

Ich schreibe alles nur für mich selbst. Und es sieht so aus, als würde ich einige Daten, die ich sowieso nicht ändern sollte, nicht ändern. Aber der Wunsch, mich vor meiner eigenen Dummheit zu schützen, lässt mich die OOP-Architektur so vernieten, dass sich nur das ändern lässt, was zugänglich sein muss. Der Rest ist es nicht. Und hier sind const + Vererbungstypen von großer Hilfe. Ich empfehle es.
 
Dmitry Fedoseev:

Vielleicht ist dies ein Teil, der von den Entwicklern an die normalen Benutzer weitergegeben wird. Wie die Startfunktion im EA und die Bid- und Ask-Variablen. Wenn man alles selbst macht, hat es keinen Sinn, sich mit allen möglichen Konventionen herumzuschlagen.

Leider müssen wir diesen ganzen Ballast mitschleppen, um die Kompatibilität zu gewährleisten. Andererseits lassen sich kleine C- und C++-Codes sehr schnell auf MQL portieren (dies wurde mehrfach überprüft).
 

Mir ist eine interessante Tendenz aufgefallen: In den allermeisten Fällen sprechen diejenigen, die keine Ahnung haben, von der Ungeheuerlichkeit der Vorteile. Meistens sind es Scharfschützen, das ist typisch.

Ja, natürlich ist Sharpe besser und praktischer, wenn man etwas so gerade wie einen Stock machen muss).

 
zaskok3:
Es ist keine Seltenheit, dass ich solche Konstruktionen absichtlich verwende:
Wenn ich die Daten des internen Objekts nicht ändere und mich nicht darauf beziehe, gebe ich die Methode als statisch an. Ich finde, dass die Verwendung von const und static die Lesbarkeit/Verständlichkeit meines eigenen Codes erheblich verbessert. Außerdem lassen sich so oft Fehler oder Schwachstellen in der eigenen Architektur in einem frühen Stadium der Implementierung erkennen.
...

Ach, Leute. Habt Erbarmen mit MetaQuotes. Eines der wichtigsten Gebote eines Programmierers: Verwenden Sie niemals statische Daten. Zweites Gebot: Wenn du statisch arbeiten willst, siehe den ersten Punkt:)

Wenn statische Daten von einem Thread geändert werden, während ein anderer sie liest, erscheinen solche Wunder der Multithreading-Programmierung, dass man sich an diese Statik wie an einen schlechten Traum erinnern kann.

Aber gut für die Benutzer in MQL: kein Multithreading und folglich wird keine Methode statische Daten ändern, bevor ein Benutzer-Thread das Lesen beendet hat.

 
Vasiliy Sokolov:

Eines der ersten Gebote eines Programmierers: Verwende niemals statische Daten. Zweites Gebot: Wenn du statisch arbeiten willst, siehe den ersten Punkt:)

Wenn statische Daten von einem Thread geändert werden, während ein anderer sie liest, treten solche Wunder der Multithreading-Programmierung auf, dass man sich an diese Statik im Nachhinein wie an einen schlechten Traum erinnern kann.

Einmal mehr bin ich überzeugt, dass die Diskussion nicht funktionieren wird.)
 
Комбинатор:

Mir ist eine interessante Tendenz aufgefallen: In den allermeisten Fällen sprechen diejenigen, die keine Ahnung haben, von der Ungeheuerlichkeit der Vorteile. Hauptsächlich Scharfschützen, was typisch ist.

Ja, natürlich ist Sharp besser und praktischer, wenn man etwas so gerade wie einen Stock machen muss).

Classical masa b pluses: "Sie mögen keine Katzen? Sie wissen nur nicht, wie man sie zubereitet".

Nein, ich bestreite nicht, dass C++ wie keine andere Sprache an Entwicklungsstandards angepasst werden kann. Aber bis man diese Standards erreicht hat, kann man mit einem solchen Aufwand getötet werden, dass man entweder ein wirklich guter C++-Programmierer wird oder aufgibt und zu 1C geht, um ERP-Tickets zu erstellen.

 
Vasiliy Sokolov:

Klassische B-plus-Leute-Maske: "Du magst keine Katzen? Sie wissen nur nicht, wie man sie zubereitet".

So ist es nun einmal.)

Ich habe nichts gegen Sharp, ich schreibe Bots damit, es ist praktisch und schnell.

Ich mag es einfach nicht, wenn Leute etwas in den Dreck ziehen, das es nicht verdient hat, und außerdem etwas, das niemand unbedingt benutzen muss.

Das gilt sowohl für die Nachteile als auch für die Vorteile im Allgemeinen.

 
Комбинатор:

So ist es nun einmal.)

Ich habe nichts gegen Sharp, ich schreibe jetzt Bots damit, es ist praktisch und schnell.

Ich mag es einfach nicht, wenn Leute etwas mit Dreck bewerfen, das es nicht verdient hat, und außerdem etwas, das niemand unbedingt benutzen muss.

Dies gilt sowohl für Konstanten als auch für Profis im Allgemeinen.

Ok, die Welt. Es ist nur so, dass die Diskussion über C++ immer in ein Tohuwabohu ausartet.

Z.U. Wenn mir jemand erklären könnte, was das Problem mit const ist, wäre ich dankbar. Ich verstehe das wirklich nicht.

 
Vasiliy Sokolov:

Alexey hat das Beispiel geschrieben. Eine konstante Methode kann ihre Klassenmitglieder nicht ändern.

void bar(X& obj) const 
    {
        obj._x = 42; // OK! obj передается по ссылке и не имеет модификатора const
        _x = 42; // ERROR!
    }

Vielleicht übersehe ich etwas, aber... hier. Alexey schrieb, dass die konstante Methode bar das Objekt der Klasse obj ändert. Was ist das Problem?

Ja, obj wird als Referenz übergeben, aber die Methode ist noch nicht konstant geworden...

 
Alexey Kozitsyn:

Vielleicht übersehe ich etwas, aber... hier. Alexey schrieb, dass die konstante Methode bar das Objekt der Klasse obj ändert. Was ist das Problem?

Ja, obj wird als Referenz übergeben, aber die Methode bleibt trotzdem konstant...

Es ist nicht seins, sondern ein völlig fremdes von der gleichen Art.