Defaultwert Initialisierung
-
Vielleicht mag mir jemand zeigen, an welcher Stelle ich falsch liege.
Inhaltlich gar nicht. Will man aber ganz korrekt sein, dann muss man darauf hinweisen, dass es sich hier seit dem TC 1 nicht mehr um default- sondern um value-initialization handelt.
Das neue Value initialization bedeutet für PODs aber genau soviel wie das alte default initialization ist also äquivalent zu zero initialization.
Default Initialization für PODs ist dafür jetzt äquivalent zu keine Initialisierung.Auf jeden Fall sollte die Zeile
double* arr = new double[CONSTANT]();
alle CONSTANT doubles mit 0.0 initialisieren.
-
Hallo erstmal...
double* test = new double[100](); double a = test[12];
Dann müsste hier a den Wert 0.0 haben.
Ich krieg aber a = -6.2774385622041925e+066 zurück.Ok, das ist schon nah an der 0
Aber so ganz dann doch nicht.Oder mach ich da irgendwas grundlegend falsch...
-
meinst du das:
double* test = new double[100];
aber denke daran, daß das Array noch nicht initialisiert ist!! Ihm wird nur Speicher zugewiesen; da steht noch irgendein 'Schrott' drin;-))
-
Speicher freigeben nicht vergessen!!!!!!
delete []test;
-
freshman schrieb:
meinst du das:
double* test = new double[100];
Nein, er meint das, was in seinem Posting steht.
-
müsste das nich ne 0 initialisierung machen?
double* test = new double[100](0);//<--da double a = test[12];
-
DJGPP 3.3.3 kann das jedenfalls nicht
-
@otze: error C2538: new : cannot specify initializer for arrays
@all: sorry für meinen nonsense
-
jo geht echt nich...
double* test = new double[20]; ZeroMemory(test,sizeof(double)*20); delete[] test;
so klappts aber(aber leider nur da, wo die windows.h is :()
-
Ich hab das ganze mal mit ein paar Compilern von MS probiert, und das folgende kam dabei heraus:
VC++ 6: Initialisierung findet nicht statt,
VC++ 7.1 & VC++ 8: Initialisierung erfolgt beim Aufruf mit ...()Also denk ich wohl, dass ein standardkonformer Compiler die Initialisierung schon ausführt.
-
Kühl! :p
Das haut hin. Mal sehen ob das schneller als ne olle Schleife ist...
-
ZeroMemory ist nur ein Makro, das memset benutzt.
Man könnte einfach std::fill, std::memset nehmen...
-
@otze:
Schmeiss' die windows.h raus und mach#include <memory.h> ... memset(test, 0, sizeof(double)*20);
Ich weiss leider nicht so genau, ob es im Standard einen äquivalenten Header ohne das .h gibt
So bist Du auf jeden Fall den unnötigen Windows-Ballast los.[edit]mist, schon wieder zu langsam[/edit]
-
//schnipp
-
Deadlef schrieb:
Ich weiss leider nicht so genau, ob es im Standard einen äquivalenten Header ohne das .h gibt
#include <cstring> #include <memory>
-
memory hat aber mit memset nichts zu tun.
-
Soweit ich das sehe ist eine Initialisierung in einer For-Schleife praktisch kaum langsamer als std::memset.
Wahrscheinlich geht es eh nicht groß schneller... der Compiler wird sich das intern schon so optimieren wie er es braucht (hoffe ich mal)
-
@Shlo: wozu #include<cstring> ?
-
memset macht nix anderes, ist aber viel schöner als ne forschleife,ausserdem ist die stl dazu da benutzt zu werden, aus einigen gründen, die hier aufzuführen etwas am thema vorbeigehen würden
-
freshman: Weil memset dort deklariert ist.
otze: memset ist nicht Teil der STL.