Ita*_*iwa 4 c++ dynamic-arrays
在C ++入门5版中。第十二章动态内存:
如果初始化程序少于元素,则其余元素将被值初始化。如果初始化程序多于给定的大小,则新表达式将失败,并且不会分配任何存储空间。在这种情况下,new抛出bad_array_new_length类型的异常。与bad_alloc一样,此类型在新的标头中定义。
这是关于分配和初始化动态数组的。但是我认为这是不对的:如果初始化器的数量大于动态数组的大小,则这是编译时错误,而不是运行时错误:
auto p = new int[3]{4, 5, 6, 7}; // compile-time error: Too many initializers.
Run Code Online (Sandbox Code Playgroud)
如果您使用常量作为数组大小,并且编译器可以清楚地告诉您存在问题,则这可能是编译时错误。
但是,在很多情况下,分配的内存的大小不是恒定的,而是在编译时无法推断的变量。在这种情况下,异常将在运行时引发。