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.

这可能是一个编译时错误,以防您使用常量作为数组大小,而编译器可以清楚地告诉您存在问题。

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

最新更新