new[]
-
Sone schrieb:
Ganz sicher bin ich nicht, warten wir auf camper.
Sone schrieb:
Ja, Sutter hat Recht. Ich habe mich vertan, bei den Zitaten...
Sone schrieb:
Oh.... verdammt... du hast Recht. Das bezieht sich auf Multidimensionale Arrays... ich wusste, da stimmt was nicht... ja, ich habe die Zitate nicht verstanden, verdammt. Die sind auch immer sowas von nicht selbsterklärend.
Wieder ein typischer Sone-Multifail.
Im Gegensatz zur Situation vor einem Jahr hat sich eigentlich nur geändert, dass Du ständig den Standard zitierst aber kaum verstehst was drin steht.
Endlich mal Fresse halten?
-
dass Du ständig den Standard zitierst aber kaum verstehst was drin steht.
Nein, ich verstehe prinzipiell gut was drin steht. Das war ein verwirrender Fall.
Zeig mir nochmal den letzten, wo ich den Standard zitiere und "kaum verstehe was drin steht".
Endlich mal Fresse halten?
Wieso sollte ich?
Btw, was genau ist ein Multifail? Ich hatte nur ein Zitat falsch gedeutet, das ist alles. Und dabei das richtige noch im ersten Post gebracht. Das ist nichts schlimmes. Aber ich wusste genau, das gleich der nächste Spinner ankommt und das für seine Anti-Sone Kampagne ausnutzt.
-
okay, ich habe die diskussion soweit passiv beobachtet und bedanke mich nun für die aufklärung.
-
doktor banane schrieb:
okay, ich habe die diskussion soweit passiv beobachtet und bedanke mich nun für die aufklärung.
Da du nun aber schon auf der ersten Seite den Anwendungsfall genannt und den Code gezeigt hast, fühl' ich mich verpflichtet, dich davon zu unterrichten, dass das keine gute Idee ist, auch wenn es nun doch erlaubt ist:
class c { bool *_d; c(); public: c(unsigned l) : _d(new bool[l]) {} };Vektoren darfst du genauso problemlos mit jeder Größe initialisieren, und ich bezweifle, dass der Performance-Verlust so groß ist..
Falls doch, und die Performance sollte dann wirklich Druck machen, solltest du auf RAII achten um zumindest die Exception-Safety zu garantieren.Und außerdem Marthogs Tipp beachten:
Ja. Die Abfrage, ob der Wert gültig ist, ist deutlich effizienter, als ein unnötiger new[] oder delete[] call.
Zumindest den Ctor also so umschreiben:
c(unsigned l) : _d(l ? new bool[l] : nullptr /*bzw. einfach NULL/0 */) {}Für sowas gibt es bspw. boost::scoped_array.
Wie gesagt, wahrscheinlich kannst du auch
vectorbenutzen.
-
Sone schrieb:
Oh, Stop! Nein, das sollte (ohne es jetzt zu pruefen) gar nicht kompilieren:
Every constant-expression in a noptr-new-declarator shall be an integral constant expression (5.19) and evaluate to a strictly positive value.
Das heisst, es darf 0 vorkommen, aber nur, wenn die Bounds zur Laufzeit vorgegeben werden. Wenn du da tatsaechlich 0 als Literal reinschreibst, dann darf das nicht kompilieren.
Das Problem hier ist das fehlerhafte Zitieren.
constant-expression ist kursiv, und das bezieht sich folglich (siehe 1.6) auf die Syntaxkategorie (folglich muss man automatisch noch einen Blick auf die Grammatik werfen, um den Sinn der Aussage zu erfassen) und nicht konstante Ausdrücke im Allgemeinen.