const
-
Hallo, warum braucht man hier const, ich meine a wird doch gar nicht verändert oder?
Und selbst wenn es verändert werden würde, so würde doch das Programm nicht funktionieren, da er dann die Aktion nicht ausführen kann, man würde lediglich erkennen dass man einen Fehler hat.SimpleFloatArray::SimpleFloatArray (const SimpleFloatArray& a) { //verhindert Veränderung von a n = a.n; p = new float[n]; for (int i = 0; i < n; i++) p[i] = a.p[i]; }
-
Wieso stellst du die gleiche Frage, wie vor ein paar Tagen?
http://www.c-plusplus.net/forum/322968
-
Wenn du trollen willst, dann denk dir doch wenigstens eine neue Frage aus, damit's nicht so auffällt.
Aber gut, ich wiederhole, was wahrscheinlich schon im anderen Thread gesagt wurde:a) du "brauchst" das const nicht, solange du die Funktion mit keinem const-Objekt aufrufst. Da das der Kopierkonstruktor ist, wird der aber sicher irgendwo implizit aufgerufen, wahrscheinlich mit nem const-Objekt.
b) das const gehört da trotzdem hin, ganz eben WEIL das Objekt in der Funktion nicht verändert wird. Das erlaubt es, die Funktion mit konstanten Objekten und temporären Objekten aufzurufen und signalisiert dem Nutzer, dass die Funktion das Objekt nicht verändert.
Und selbst wenn es verändert werden würde, so würde doch das Programm nicht funktionieren, da er dann die Aktion nicht ausführen kann, man würde lediglich erkennen dass man einen Fehler hat.
Hä, bitte was? Ohne const könntest du das Objekt verändern, dann auch aktional voll ohne Fehler ausführen. const verhindert absichtliche und unabsichtliche Änderungen.
-
Hallo, warum braucht man hier const, ich meine a wird doch gar nicht verändert oder?
Du willst das Funktionsargument nicht kopieren. Das heißt, du nimmst eine Referenz*. Weil du aber als Funktionsaufrufer eine handfeste Garantie willst, dass das Funktionsargument nicht verändert wird, ist der Parameter eine Const-Referenz.
~* Könnten auch Zeiger sein, läuft auf dasselbe hinaus.~
-
.. außerdem handelt es sich hier um einen Kopie-Konstruktor - daher besser:
SimpleFloatArray::SimpleFloatArray( const SimpleFloatArray& a ) // 'const' verhindert Veränderung von a : n( a.n ) , p( new float[a.n] ) { std::copy( a.p, a.p + a.n, p ); // #include <algorithm> }siehe auch http://de.wikipedia.org/wiki/Initialisierungsliste
und vertrau darauf, das der std::copy es mindestens so gut kopiert, wie eine selbst geschriebene Schleife
-
Entschuldigung,
hatte gedacht der PC hat die Nachricht nicht abgeschickt...