首页 > 解决方案 > C++ 引物动态数组的初始化器数量超过大小

问题描述

在 C++ 入门 5 版中。第 12 章动态内存:

如果初始化器的数量少于元素,则剩余的元素将被初始化。如果初始值设定项多于给定大小,则新表达式将失败并且不会分配存储空间。在这种情况下,new 会引发 bad_array_new_length 类型的异常。与 bad_alloc 一样,此类型在新标头中定义。

这是关于分配和初始化动态数组。但我认为这是不正确的:如果初始化器的数量大于动态数组的大小,那么这是编译时错误而不是运行时错误:

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

标签: c++dynamic-arrays

解决方案


这可能是一个编译时错误,如果您使用常量来表示数组大小并且编译器可以清楚地告诉您有问题。

但是,在很多情况下,分配的内存大小不是恒定的,而是一个在编译时无法推断的变量。在这种情况下,将在运行时抛出异常。


推荐阅读