was ist der return-Typ der neu in c++?
in C, malloc()
zurück void*
. Aber in C++, was bedeutet new
zurück?
double d = new int;
- Während ich grundsätzlich einverstanden mit Ihre Meinungen gegenüber kam ' s Fragen, ich glaube, dass dies eine echte und die wichtige Unterscheidung zwischen einem neuen Ausdruck und dem neuen Betreiber, ist schwer zu finden, wenn Sie googeln für "operator new".
- Eine schlechte Frage kann noch führen zu guten Antworten.
- stackoverflow.com/questions/240212/...
- Es ist ein bisschen von einem semantischen Fehler hier. Da
new
ist eine Sprache, Schlagwort und keine Funktion ist, gibt es nicht "zurückkehren" nichts. Die Frage ist, wie zu Fragen, was tut1
zurück oder was macht+
zurück? Nun, es hängt davon ab. Die richtige Frage ist, was die Regeln sind, dass Ausdrücke mit es bewerten zu können.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt zwei Dinge, die Sie haben, zu unterscheiden. Die eine ist eine neuen Ausdruck. Es ist der Ausdruck
new T
und Ihr Ergebnis ist eineT*
. Es macht zwei Dinge: Erstens ruft es die neuen Betreiber zu Speicher, dann ruft es die Konstruktor für T. (Wenn der Konstruktor bricht, mit einer Ausnahme, es wird sich auch an den delete-operator.)Den genannten neuen Betreiber, jedoch kommt in verschiedenen Geschmacksrichtungen. Die wichtigste ist diese:
Könnte man ihn explizit aufrufen, aber das ist nur selten getan.
Gibt es andere Formen der neuen Betreiber, zum Beispiel für arrays
oder die so genannte Platzierung neuer (das ist wirklich ein fake-new, da es nicht zuordnen):
new int
ist eine neue Ausdruck. Die Sprache ist definiert, dass es gibt einint*
. Unter anderem ruft auch die new-operator, die, ja, gibt einevoid*
, weil es nur reserviert raw-Speicherung. Der Konstruktor (leere fürint
) schaltet raw storage in ein initialisiertes Objekt. Man könnte dies als Umwandlung vonvoid*
zuint*
wenn Sie mögen.new T
Auswertung nichtT*
für arrays, allerdings.T
ist ein array-Typ, dannnew T
ist nicht kompatibel mitT*
. Das ist alles was ich sagen will 🙂 Es nicht davon abhängig, ob Sie schreiben, Klammern oder nicht. Es kommt auf den Typ an. (stellen Sie sich vor, dassT
können Sie ein typedef für ein array-Typ oder ein template-parameter übergeben werden ein array-Typ). So ist in einer VorlageT * t = new T;
ist nicht richtig für arrays.T
könnte eintypedef
für ein array. Ich hätte nie gedacht, dass dieses. Gut, wenn man bedenkt die Frage, die ich immer noch denke, wir überspringen dieses detail, aber ich bewundere deine Liebe zum detail.Typ der zurückgegebene Wert aus sowohl
new Type[x]
undnew Type
istType *
. Dein Beispieldouble d = new int
enthält zwei Fehler:double *d = new int
int *d = new int
odervoid *d = new int