C ++ primer динамический массив число инициализаторов превышает размер - PullRequest
4 голосов
/ 03 ноября 2019

В C ++ primer 5 edition. глава 12 Динамическая память:

Если инициализаторов меньше, чем элементов, остальные элементы инициализируются значением. Если инициализаторов больше, чем заданный размер, то новое выражение завершится неудачно и хранилище не будет выделено. В этом случае new создает исключение типа bad_array_new_length. Как и bad_alloc, этот тип определен в новом заголовке.

Речь идет о выделении и инициализации динамических массивов. Но я думаю, что это неправильно: если число инициализаторов больше, чем размер динамического массива, то это ошибка времени компиляции, а не ошибка времени выполнения:

auto p = new int[3]{4, 5, 6, 7}; // compile-time error: Too many initializers.

1 Ответ

9 голосов
/ 03 ноября 2019

Это может быть ошибка во время компиляции, если вы используете константы для размера массива, и компилятор может четко сказать вам, что есть проблема.

Однако, есть много случаев, когда размервыделенная память не является постоянной, а скорее переменной, которая не может быть выведена во время компиляции. В этом случае исключение будет выдано во время выполнения.

...