Findest du es hilfreich?Wie oft deklarieren Sie Ihre Funktionen als const?
Antwort
Jedes Mal, wenn Sie wissen, dass die Methode den Status des Objekts nicht ändert, sollten Sie es als konstant deklarieren.
Es hilft beim Lesen Ihres Codes. Und es hilft, wenn Sie versuchen, den Zustand des Objekts zu ändern - Compiler wird Sie stoppen.
Und wenn die Funktion nicht einmal den Objektstatus berührt, sondern Eingangsargumente in den Rückgabewert reintransformiert, sollte es statisch sein. Static> const member> normales Mitglied. – Lucas
Wenn Sie ein const
Objekt haben, sind die einzigen Methoden, die der Compiler Sie aufrufen lassen, die durch das Schlüsselwort const
als sicher gekennzeichneten Methoden. Tatsächlich sind nur Elementmethoden als const
Methoden sinnvoll.
In C++ erhält jede Methode eines Objekts einen impliziten this
Zeiger auf das Objekt; Ein const
Verfahren wird einfach einen const
this
Zeiger erhalten.
Angenommen, Sie sprechen über Methoden, wie in:
struct Example {
void f() const;
};
Dann, wenn sie auf ein konstantes Objekt aufrufbar sein sollte, sollte das Verfahren const sein.
So oft wie möglich. Funktionen, die keine Datenelemente ändern müssen, sollten als const deklariert werden. Dies macht den Code verständlicher und kann dem Compiler Hinweise zur Optimierung geben.
Nicht oft genug ....
Während alle Antworten sind richtig, wenn Sie einen libary verwenden, die nicht const correct dann ist es schwierig konst alle Orte verwenden Sie es verwenden sollten.
Wenn Sie eine alte API, die eine char * nimmt, dass für alle logischen Zwecke sollte ein const char * sein, dann müssen Sie entweder const in Ihrem Code vergessen oder einige hässliche Gießen zu tun. In diesem Fall vergesse ich const.
Die Alternative besteht darin, die API zu verpacken und zu bestimmen, ob sie tatsächlich Kostendaten aufnehmen sollte und wenn dies der Fall ist, die Konsistenz der Eingabedaten in Ihrem Wrapper wegwerfen. Dies bedeutet, dass Sie nur das hässliche Casting ONCE brauchen und Sie können die Tatsache kommentieren, dass Sie festgestellt haben, dass dies sicher und korrekt über Ihre Tests usw. war. IMHO sollten die meisten, wenn nicht alle "alten APIs" verpackt werden ... –
Ich habe Funktionen als const deklariert, aber jetzt mache ich selten mehr.
Das Hauptproblem war, dass, wenn ich eine Funktion von const zu non-const ändern wollte, würde es bedeuten, dass alle anderen const Funktionen, die diese Funktion aufrufen, auch zu non-const geändert werden müssten.
Das passierte öfter, als ich aufgrund der Optimierung dachte. Zum Beispiel hatte ich eine GetData() -Funktion, die einen Zeiger auf die Daten zurückgab, aber später optimierte ich, um die Daten nur einzurichten, wenn GetData() aufgerufen wird (was den Zustand des Objekts ändert, also ist es nicht länger ein const) Funktion).
Gleiches für andere Funktionen, die eine Berechnung durchführen könnten, ohne den Status des Objekts zu ändern, aber irgendwann war es sinnvoller, das Ergebnis zwischenzuspeichern, da die Funktion viele Male aufgerufen wurde und ein Flaschenhals war.
Auch in der Praxis, zumindest für mein Projekt, sah ich sehr wenig Nutzen davon, meine Funktionen als const zu deklarieren.
Funktionen, die nicht funktionieren Wenn Sie den "logischen Wert" nicht ändern können, müssen Sie nur veränderliche Datenelemente für Ihren Cache verwenden. –
Ja, stimme Rogers Kommentar zu. Datenelemente, die als veränderbar deklariert sind, können innerhalb einer const-Funktion geändert werden. – jasonline
Ich benutze const bei fast jeder Gelegenheit, und wie die Tatsache, dass es sowohl die Absichtserklärung liefert als auch die Einhaltung dieser Absicht durchsetzt. Sprachmerkmale werden nicht viel besser als das, und doch ist const seltsam ungeliebt.(Die Realität scheint zu sein, dass die Mehrheit der selbsternannten C++ Programmierer nicht den Unterschied zwischen int*, int*const, const int*
erklären kann und const int*const
.)
Während es nie wegen seiner Herkunft ‚C‘ passieren konnte, denke ich oft C++ würde sei eine bessere Sprache, wenn Const der Standard gewesen wäre und eine großzügige Streuung von (etwa) 'var' oder einem ähnlichen Schlüsselwort notwendig gewesen wäre, um eine Modifikation von Variablen nach der Konstruktion zu ermöglichen.
- 1. Karte nicht als const deklarieren und zuweisen
- 2. Wie oft erstellen Sie implizite Conversions für Ihre Klassen?
- 3. Warum deklarieren Sie immer Funktionen in JavaScript?
- 4. Deklarieren einer Const-Variable in R
- 5. Funktionen in JSP deklarieren?
- 6. ES6/JavaScript - Variablen ohne let/const deklarieren
- 7. Pure/const Funktionen in C++
- 8. Const Referenz als Klassenmitglied
- 9. Wie kann ich eine Klasse deklarieren und ihre Member-Funktionen später in C++ verwenden?
- 10. Wo zu const struct Array zu deklarieren
- 11. Wie interne Funktionen in ihre eigenen Funktionen ändern?
- 12. Externe Funktionen deklarieren, je nachdem, ob sie existieren
- 13. Wie oft Google App Marketplace ihre Suchindexierung aktualisiert
- 14. Eigenschaft als Objekt deklarieren?
- 15. const Zeiger als Konstruktorargument
- 16. Kann ich Membervariable als const in der Klasse von C++ deklarieren? Wenn ja, wie?
- 17. Wie werden Funktionen ausgewertet, wenn sie als Argumente übergeben werden
- 18. Deklarieren von Strukturen innerhalb von Funktionen in C
- 19. Wie deklarieren Sie String-Konstanten in C?
- 20. Warum definieren C++ - Bibliotheken oft ihre eigenen primitiven Typen?
- 21. Wie deklarieren Sie die Werte eines Wörterbucheintrags als veränderbar?
- 22. Delphi: Wie aktualisieren Sie Ihre Anwendungen automatisch?
- 23. Sortieren Sie Ihre Klassen?
- 24. PHP - warum konnte ich statische const Variable nicht deklarieren?
- 25. Wie oft evaluieren und aktualisieren Sie Ihre Entwicklungsumgebung und Entwicklungsumgebung. Werkzeuge?
- 26. Deklarieren von Const mit geschweiften Klammern in JSX
- 27. Deklarieren uninterpretierte polyadische Funktionen mit Z3Py
- 28. Verwenden Sie ihre Funktionen im Repository (Doctrine + Zend Expressive)
- 29. Wie dokumentieren Sie Ihre Datenbankstruktur?
- 30. JAXB als Abhängigkeit deklarieren. Warum?
ständig! (Sorry, konnte mir nicht helfen) – Thilo