calloc - dynamic oder static cast?
-
akari schrieb:
- in C++ wird kein calloc verwendet, sondern new
setzt denn 'new' alles auf 0?
'calloc' macht das.
-
net schrieb:
akari schrieb:
- in C++ wird kein calloc verwendet, sondern new
setzt denn 'new' alles auf 0?
'calloc' macht das.new ruft den Konstruktor auf.
Greetz
-
Ein double hat keinen Konstruktor.
-
hustbaer schrieb:
Ein double hat keinen Konstruktor.
[ironie] Nein! Ist nicht wahr.
[/ironie]
Das wäre halt die logische Schlussfolgerung gewesen zu meiner Aussage.
Mal abgesehen davon das die Aussage davor bereits falsch war. Denn bei new kann man den Speicher initialisieren, im Gegensatz zu new[] (aber auch da gibt es Möglichkeiten).Greetz
-
hustbaer schrieb:
CStoll, *gähn*. Containerklassen sind laaaaaaangsam, VLAs sind schnell. Oder anders gesagt: VLAs sind vom Mars, Containerklassen von der Venus. Und das eine kein Ersatz für das andere. Oder so

Vor allem gehören Container und VLAs zu völlig unterschiedlichen Sprachen, also lohnt es sich überhaupt nicht, die miteinander zu vergleichen.
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.
-
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
-
hustbaer schrieb:
Ein double hat keinen Konstruktor.
Doch.
-
Einen Destruktor hat double:
template<class T> void callDestructor(T& object) { object.~T(); } int main() { double d = 5.0; callDestructor(d); }
-
Für built-in Typen hat das eine ganze einfache bedeutung, da es bei diesen zumindest keinen Standardkonstruktor gibt, sie sind einfach nicht initialisiert (d.h. sie haben dann einen undefinierten Wert).
Siehe auch hier:
http://tutorial.schornboeck.net/initliste.htmGreetz
-
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.