calloc - dynamic oder static cast?
-
Vellas schrieb:
CStoll schrieb:
hustbaer schrieb:
Ein double hat keinen Konstruktor.
Wenn du unbedingt objektorientiert denken willst, dann hat double auch "Konstruktoren" (auch wenn C++ die vermutlich anders behandelt als klassische Konstruktoren) - und
p=new double[x];initialisiert afaik alle Elemente des angelegten Feldes mit 0.0.Greetz
Wenn nicht definiert ist was drinnen steht sind die für micht nicht initialisiert. Dass sie in jedem Fall "default konstruiert" sind ist klar. Aber egal. "new int []" (oder double) macht auf jeden Fall keine zero-initialization, oder?
Und kann es sein dass du das mit VC im Debug-Mode ausprobiert hast? Im Debug Mode wird *alles* initialisiert, mit 0xcd für neu allozierte Sachen, und 0xdd wird über gelöschte Sachen drübergeschrieben, 0xfd sind "guard bytes" vor oder hinter Buffern etc. Das ist bloss ne Debug-Hilfe. Hat aber mit dem C++ Standard nix zu tun

@"Strichi-Strichi" ("---") und "auf jeden fall":
Nein, ein double hat keinen Konstruktor (und auch keinen Destruktor). Aus. Ende. Dass man mit templates was schreiben kann was dann wie ein Konstruktor-Aufruf aussieht ist eine andere Sache. Das ist soetwas wie void-returns, das heisst noch lange nicht dass eine void Funktion einen "Wert vom Typ void zurückgibt", bloss weil man es so schreiben kann als täte sie es.
-
double* p = new double[10]();Die Klammern bewirken das der Konstruktor von double aufgerufen wird.
-
wisser schrieb:
double* p = new double[10]();Die Klammern bewirken das der Konstruktor von double aufgerufen wird.
Nein das bewirken sie nicht. Noch einmal: Ein double hat keinen Konstruktor!
Die Klammern bewirken, dass aus der Default-Initialisierung(= keine Initialisierung für Typen wie double) eine Value- oder auch Zero-Initialisierung wird. D.h. hier werden alle 10 doubles mit 0 initialisiert.