инициализировать размер массива из другого значения массива - PullRequest
4 голосов
/ 04 января 2011
#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

Почему это не работает?

Ответы [ 3 ]

10 голосов
/ 04 января 2011

К сожалению, вы не можете сделать это в стандартном C ++, потому что vals[2] не является константным выражением! В следующем стандарте у вас будет constexpr (реализовано в g ++ 4.6) для простого запроса оценки во время компиляции:

#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 голосов
/ 04 января 2011

Возможно, что значение выражения const даже не известно во время компиляции. Например, вы можете инициализировать константу с помощью чего-то, возвращаемого функцией, например

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

Так что это не эта константа , как вы могли бы подумать

5 голосов
/ 04 января 2011

Компилятор C ++ может выделить только массив с размером, известным во время компиляции. Если вы хотите выделить часть памяти переменного размера, используйте оператор new.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...