2016-09-29 3 views
0

Я смотрел на этом алгоритме, второе: Динамическое программирование РешениеC++ динамические массивы. Почему это работает?

http://www.geeksforgeeks.org/dynamic-programming-set-24-optimal-binary-search-tree/

Это создает динамический массив: Int затраты [п] [п];

Как это работает? Я могу запустить код на эмуляторе GeeksForGeeks C++, но локально в Visual Studio я получаю ошибку «Expression должен иметь постоянное значение».

Что я не понимаю здесь? Не нужно ли C++ знать размер массива перед компиляцией?

+1

VLAs являются нестандартными C++, некоторые компиляторы (такие как GCC) поддерживают их, но на него не следует полагаться, поскольку это не переносимый код. – ArchbishopOfBanterbury

+0

Источник называет это реализацией C/C++, которая уже заставляет задуматься о правильности любого из кода. В C99 VLA поддерживаются стандартным AFAIK. – UnholySheep

+0

Как 'sizeof' работает на таком массиве? – Slava

ответ

4

Код не является стандартным.

type name[runtime_size] 

Это то, что называется массивом переменной длины. Это не стандартно в C++ и будет компилироваться только в компиляторах, у которых есть расширение для этого типа g ++ или clang. Причина, по которой это расширение существует, справедлива в C99.

Вы совершенно правы, что размер массива должен быть известен во время компиляции. Если вам нужен массив, и размер не будет известен до времени выполнения, я предлагаю вам использовать std::vector или std::unique_ptr<type[]>.

+0

Другим вариантом будет использование нового. –

+0

@JacobMcCarthy, да, но только после того, как 'vector' и' array' были исследованы и найдены желающими. Они не очень часто встречаются. – user4581301