2013-12-16 3 views
2

Почему C++ не допускает это как размер массива?Размер массива как логарифм

const int SIZE = ceil(log10(pow(2., 1000))); 
int arr[SIZE]; 

Для тех, кто заинтересован, это проблема 16 на ProjectEuler. Я пытаюсь объявить массив, чтобы держать каждую цифру числа 2^1000, и это мой способ найти, сколько элементов мне нужно.

+1

Какая ошибка? –

+0

ошибка C2057: ожидаемое постоянное выражение – bcf

+0

Я могу запустить код: http://ideone.com/WU28aF –

ответ

4

Это не позволяет этого, потому что правая сторона = не является постоянным выражением, которое требуется для выражения SIZE. Теперь const int просто означает, что это целочисленный объект только для чтения.

const int SIZE = ceil(log10(pow(2., 1000))); 

Используйте динамический массив вместо того, чтобы, например, std::vector.

Или вы можете взять калькулятор и жёстко значения - это примерно 301,03, кстати :)

+0

Разве это не константа, потому что функции журнала и ceil могут оцениваться по разным значениям в зависимости от округления? – bcf

+0

@ David Это, и из-за того, что 'ceil' и' log10' не объявлены 'constexpr'. Которые они не могут быть в любом случае, так как они из библиотеки C. – jrok

0

, даже если вы используете константный спецификатор для SIZE, это только означает, что у вас есть только для чтения переменного и это значение не будет известно во время компиляции. Из-за вызовов функций ceil, log10, pow значение SIZE будет известно только во время выполнения, поэтому компилятор не может статически распределять байты SIZE, поскольку SIZE он все еще известен.

Итак, динамически выделяйте память или вычислите значение самостоятельно :)

Смежные вопросы