Was habe ich von const?
-
@Artchi: das Programm wuerde ich gerne sehen - denn wo soll const etwas beim Return Value bringen??
Laut einem GotW bringt const nix bis fast garnix fuer die Performance (const hat aber genug andere Qualitaeten)
-
Laut einem GotW bringt const nix bis fast garnix fuer die Performance (const hat aber genug andere Qualitaeten)
Also meine Performance hat sich dadurch gesteigert. Die Entwicklungszeit hat sich auf jeden Fall veringert.
Ausserdem geht dank const-referenzen auch sowas hier:
void func(const string&);
func("Hallo");
func(string());Hat bestimmt sogar 'nen Fachausdruck den ich nicht kenne
Sowas nennt man Rekursion, aber was hat das mit const zu tun?
Aha. Literale oder temporäre Objekte an Funktionen übergeben nennt man neuerdings Rekursion. Glaubst du nicht, dass man dann mit dem alten Begriff der Rekursion durcheinander kommt, der etwas völlig anderes bedeutet (Selbstaufruf).
/edit: Hatte smily vergessen (siehe folgende posts)
[ Dieser Beitrag wurde am 06.06.2003 um 18:35 Uhr von Helium editiert. ]
-
Original erstellt von Helium:
Also meine Performance hat sich dadurch gesteigert. Die Entwicklungszeit hat sich auf jeden Fall veringert.sorry, ich meine die Programmlaufzeit wird sich nicht verkuerzen wenn man const richtig verwendet.
-
Ups, sich wolte eigentlich eine
hinter die Zeile setzten. War nämlich nicht ganz ernst gemeint. Also meine Enticklungszeit hat sich zwar verkürzt, aber ich hatte dich schon verstanden.
-
Der Compiler kann mit const-Variablen mehr Optimierungen vornehmen
Das ist im Allgemeinen Fall nicht richtig. Das const sagt ja nur, dass der Parameter über die Referenz nicht verändert werden kann. Das Objekt wird dadurch aber nicht const. Solange der Compiler nicht das Aliasing-Problem lösen kann (also sicherstellen kann, dass nicht irgendwo noch eine nicht konstante Referenz auf das Objekt existiert), kann er auch nicht großartig was optimieren.
Ein (nicht der!) Compiler kann mit const sehr wohl optimieren. Versuch mal ein riiiiesen großes komplexes vector als Rückgabe-Parameter zu übergeben. Einmal mit const und einmal ohne. Auf einem AthlonXP ist das sogar im Sekundenbereich messbar!!!
Ich glaube du verwechselst hier by-value und by-refrence-Rückgabe. Letzteres ist schneller, da kein neues Objekt erzeugt und kopiert werden muss. Das hat mit const aber nichts zu tun.
const ist ein weiteres Element der Typprüfung. Es hilft dem Compiler bestimmte Fehler zu finden. Es ist kein Mittel zur Optimierung.
-
Solange der Compiler nicht das Aliasing-Problem lösen kann (also sicherstellen kann, dass nicht irgendwo noch eine nicht konstante Referenz auf das Objekt existiert), kann er auch nicht großartig was optimieren.
Aber es hilft auf jeden fall gegen Aliasing, da sichergestellt ist, das diese Referenz das Original schonmal nicht verändert (wir reden jetzt nicht über dirty casts).
-
Aber es hilft auf jeden fall gegen Aliasing, da sichergestellt ist, das diese Referenz das Original schonmal nicht verändert (wir reden jetzt nicht über dirty casts).
Nur hilft das im Allgemeinen Fall nichts:
void func(const int& i, int& j) { //... } int main() { int i; func(i, i); }
Armer Compiler.
[ Dieser Beitrag wurde am 06.06.2003 um 18:53 Uhr von HumeSikkins editiert. ]
-
Ich galbe ich sollte aufhören hier zu schreiben. In letzter Zeit schreibe ich soviel Müll. Ich hoffe, das liegt daran, dass ich in der letzten Woche kaum geschlafen habe.
-
Original erstellt von Helium:
Ich galbe ich sollte aufhören hier zu schreiben. In letzter Zeit schreibe ich soviel Müll. Ich hoffe, das liegt daran, dass ich in der letzten Woche kaum geschlafen habe.Nack. Solange Du einsiehst, dass Du Müll schreibst, besteht noch Hoffnung
-
Original erstellt von Shade Of Mine:
wo siehst du hier Rekursion?Naja, habe wohl nicht richtig hingeschaut. Dachte eben das sich die Methode selbst aufruft. Habe auf Deutsch das Semikolon übersehen und mir im eben ein weiteres eingebildet...