Возможный дубликат:
C / C ++: Размер массива во время выполнения без динамического выделения разрешен?
Я в классе, где у нас есть простое назначение, чтобы написать функцию, которая возвращает указатель на динамический массив и предоставляет заглушку для его проверки. Я сделал это, поэтому я не прошу помощи с заданием. В блоге класса другой студент предполагает, что интуитивно понятно int Array[size];
где size
по-видимому, пользовательская переменная.
Я знаю, что в стандарте C ++, по крайней мере, согласно моему тексту, массив должен иметь «постоянное целочисленное выражение … больше нуля» в качестве объявления размера. Что подразумевает для меня, что их пример не может Работа. На самом деле, с VS2010 вы получаете три ошибки при попытке.
Однако они объясняют:
Я знаю, вы знаете, что даже компилятор g ++ в моей установке Ubuntu
И компилятор Bloodshed на моей установке WinXP это знает. Для определенных
уровни «знать, что» можно ожидать «int Array [size];» работать
(как это было в обоих предыдущих классах).Но очевидно, что он не запускается на некоторых компиляторах VS. Можно
только предположим, что, поскольку общим знаменателем является VS (и да, я
подтвердил это, попросив друга проверить его на своем поле), что VS
эта проблема. Один из нескольких.
Там уже путаница, потому что I know that...
часть ссылается на меня, говоря им, что не должно быть никаких причин для #include <new>
для того, чтобы использовать new
, но, кажется, они думают, что мы согласны с тем, что не должно быть никаких причин использовать new
выделить динамический массив. (?)
Так что вопрос очевиден. Есть ли компиляторы, которые примут int Array[size];
где размер не const int
без ошибок?
int Array[size];
где size
не является постоянным выражением является массив переменной длины. Это стандартная особенность C стандарта ISO 1999 года. Стандарт C ++ не принял их, но некоторые компиляторы поддерживают их как расширение языка.
(Любой компилятор C ++, когда вызывается в режиме соответствия, должен по крайней мере выполнить диагностику для типа массива с непостоянным размером.)
Кстати, это не имеет прямого отношения к используемой вами IDE; он контролируется компилятором, который вызывает ваша IDE.
Что касается #include <new>
есть стандартный заголовок с таким именем, но это не обязательно для new
оператор, который встроен в язык. <new>
заголовок предоставляет несколько перегруженных версий operator new
и несколько других объявлений.
Других решений пока нет …