Unterschied zwischen char[] und char neu[] bei der Verwendung von Konstanten Längen

Also dies mag wie ein weit-beantwortete Frage, aber ich interessiere mich mehr in die Interna, was genau passiert, anders zwischen den beiden.

Andere als die Tatsache, dass im zweiten Beispiel wird nicht nur das Gedächtnis, sondern einen Zeiger auf den Speicher, was passiert im Speicher, wenn Folgendes passiert:

char a[5];
char b* = new char[5];

Mehr direkt mit warum ich fragte diese Frage, wie kommt es, dass ich tun kann,

const int len = 5;
char* c = new char[len];

aber nicht

const int len = 5;
char d[len]; //Compiler error

BEARBEITEN Sollte erwähnt haben, ich bin immer dieser compiler Fehler auf VC++ (go figure...)

1>.\input.cpp(138) : error C2057: expected constant expression
1>.\input.cpp(138) : error C2466: cannot allocate an array of constant size 0
1>.\input.cpp(138) : error C2133: 'd' : unknown size

EDIT 2: Soll gebucht haben, der genaue code, den ich mit arbeitete. Dieser Fehler wird erzeugt, wenn die Konstante Länge eines dynamisch reservierten Arrays wird berechnet mit der run-time-Werte.

Vorausgesetzt random(a,b) gibt ein int zwischen a und b,

const int len1 = random(1,5);
char a[len1]; //Errors, since the value
              //is not known at compile time (thanks to answers)

in der Erwägung, dass

const int len2 = 5;
char b[len2]; //Compiles just fine
Ich glaube nicht, erhalten Sie einen compiler-Fehler mit GCC 4.4.6 und nicht erwarten würde.
Meine schlecht, sollte erwähnt haben, bin ich mit VC++.
Ich würde trotzdem nicht erwarten, ein Fehler.
Gut es Fehler. Ich habe den Fehler für die OP.
VC++ nimmt seinen code als auch. Fallen die const in der definition von len jedoch, und es (richtig) lehnt Sie ab,; g++ wird auch ablehnen, es, falls geben Sie -std=c++98 -pedantic als Optionen. (Es ablehnen sollten es standardmäßig, aber ich weiß nicht von jedem compiler kompiliert C++, im Gegensatz zu einigen erweiterten Sprache, in der Standardeinstellung).

InformationsquelleAutor Qix | 2012-06-27

Schreibe einen Kommentar