2011-01-03 17 views
3
#include<iostream> 
using namespace std; 

const int vals[] = {0, 1, 2, 3, 4}; 

int newArray[ vals[2] ]; //"error: array bound is not an integer constant" 

int main(){ 
    return vals[2]; 
} 

//returns 2 if erroneous line is removed 

Warum funktioniert das nicht?Array-Größe von einem anderen Array-Wert initialisieren

Antwort

5

Der C++ - Compiler kann nur ein Array mit einer zur Kompilierungszeit bekannten Größe zuweisen. Wenn Sie einen Speicher mit variabler Größe zuweisen möchten, verwenden Sie den Operator new.

+7

oder sogar noch besser, 'std :: VECTOR'. –

+1

Sieht aus wie eine Antwort auf eine andere Frage an mich –

9

Leider können Sie das in Standard C++ nicht tun, weil vals[2] kein konstanter Ausdruck ist! Im kommenden Standard würden Sie constexpr (implementiert in g ++ 4.6) haben kompilieren Zeitauswertung anfordern leicht:

#include<iostream> 
using namespace std; 

constexpr int vals[] = {0, 1, 2, 3, 4}; 

int newArray[ vals[2] ]; // vals[2] is a constant expression now! 

int main(){ 
    return vals[2]; 
} 
5

Es ist möglich, dass der Wert eines const Ausdruck ist nicht einmal zum Zeitpunkt der Kompilierung bekannt. Zum Beispiel können Sie mit etwas eine Konstante initialisieren von einer Funktion zurückgegeben, wie

const int size = rand(); // random size 

So ist es nicht , dass ständige wie Sie vielleicht denken

Verwandte Themen