c++ - 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.
解决方案
这可能是一个编译时错误,如果您使用常量来表示数组大小并且编译器可以清楚地告诉您有问题。
但是,在很多情况下,分配的内存大小不是恒定的,而是一个在编译时无法推断的变量。在这种情况下,将在运行时抛出异常。
推荐阅读
- html - 在 React 中的 div 组件上设置背景图像时,如何检测断开的链接?
- javascript - How to access a constant nested function's parameter in javascript?
- c# - 从另一个进程接收消息
- r - 使用 tree_layout() 获取无根树的结构
- jquery - 从 Jquery 调用 AWS API 时出现 CORS 错误
- regex - How to double escape double quotations marks using regex in a pair of double quotation marks
- vba - 始终返回 Outlook 收件人的 SMTP 电子邮件地址
- python - Sympy:求解具有初始条件误差的微分方程
- c# - EF ComplexType DbModelBuilder 字典示例
- firebase - Xamarin.Firebase.FirebaseDynamicLinks.instance 返回 NULL 是使用 Xamarin.Firebase.lid