Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 |
C::C(const A* a,const B& b): m_a(const_cast<a*>(a)), m_b(b) {} |
Zitat von »"kiba"«
Wie sieht es überhaupt hier mit aus:
C-/C++-Quelltext
1 2 3 4 C::C(const A* a,const B& b): m_a(const_cast<a*>(a)), m_b(b) {}
Glaube dafür könnte man const_cast gut benutzen...(aber ist es den auch für Pointer in Ordung?)
Zitat von »"kiba"«
Glaube dafür könnte man const_cast gut benutzen...(aber ist es den auch für Pointer in Ordung?)
Zitat von »"FalkT"«
Zitat von »"WhiteMike"«
Gibt es da nicht diesen Tipp, dass man an jeder möglichen Stelle ein const setzen sollte, wo es reinpasst?
Hast sich hier jemand überhaupt gefragt warum man das machen sollte.
Klar ist es praktisch wenn man nichts ändern kann etc., doch steckt mehr dahinter ?
Die Antwort ist ja !
Man nehme ein Projekt X ohne const-Funktionen, dann schreibt man es um, so dass alles was gut und sinnvoll ist auch const ist.
Resultat: Projekt-X-const ist durchschnittlich ca. 10-15% schneller als das Projekt-X ohne const. Diese Zahl stammt nicht von mir selbst, ich zitiere hier nur.
Fakt ist, der Compiler kann sehr viel besseren Code erzeugen, da potentielle Speicherzugriffe entfallen. Ein Stichwort ist hier Cache-WB.
Mag natürlich früher noch wichtiger gewesen sein als heute.
Man ist jedoch immer wieder überrascht, was der moderne 4er-GCC doch alles wegoptimiert. Je nach Compiler bringt const dementsprechend unterschiedliche Speed-Vorteile.
Zitat von »"dot"«
Zitat von »"kiba"«
Glaube dafür könnte man const_cast gut benutzen...(aber ist es den auch für Pointer in Ordung?)
Warum willst du das const da wegcasten!? Der Benutzer gibt dir einen const A* und du machst dir einfach einen A* draus, kannst a dann also verändern obwohl der Benutzer denkt dass du es nicht kannst!?
Zitat von »"kiba"«
Zitat von »"dot"«
Zitat von »"kiba"«
Glaube dafür könnte man const_cast gut benutzen...(aber ist es den auch für Pointer in Ordung?)
Warum willst du das const da wegcasten!? Der Benutzer gibt dir einen const A* und du machst dir einfach einen A* draus, kannst a dann also verändern obwohl der Benutzer denkt dass du es nicht kannst!?
Weil sonst eine Kompielerfehler kommt, den man kann ja nicht const A* zu A* convertieren.
Zitat von »"Helmut"«
Hi,
hast du dafür Quellen? Ich halte das nämlich für ziemlich großen Quatsch.. const kann nämlich weggecastet oder mit mutable umgangen werden, der Compiler kann also bei Libcalls nicht davon ausgehen, dass ein übergebenes Objekt unverändet bleibt.
Zitat von »"kiba"«
Zitat von »"dot"«
Zitat von »"kiba"«
Glaube dafür könnte man const_cast gut benutzen...(aber ist es den auch für Pointer in Ordung?)
Warum willst du das const da wegcasten!? Der Benutzer gibt dir einen const A* und du machst dir einfach einen A* draus, kannst a dann also verändern obwohl der Benutzer denkt dass du es nicht kannst!?
Weil sonst eine Kompielerfehler kommt, den man kann ja nicht const A* zu A* convertieren.
Werbeanzeige