Отличия от обработки массивов IDE / компиляторов

Возможный дубликат:
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 без ошибок?

-1

Решение

int Array[size];

где size не является постоянным выражением является массив переменной длины. Это стандартная особенность C стандарта ISO 1999 года. Стандарт C ++ не принял их, но некоторые компиляторы поддерживают их как расширение языка.

(Любой компилятор C ++, когда вызывается в режиме соответствия, должен по крайней мере выполнить диагностику для типа массива с непостоянным размером.)

Кстати, это не имеет прямого отношения к используемой вами IDE; он контролируется компилятором, который вызывает ваша IDE.

Что касается #include <new> есть стандартный заголовок с таким именем, но это не обязательно для new оператор, который встроен в язык. <new> заголовок предоставляет несколько перегруженных версий operator new и несколько других объявлений.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector