c++ - 在 C++ 中是否允许创建具有运行时边界的数组?
问题描述
根据 C++ : 在 C++ 中不允许使用用户输入的大小创建具有运行时边界的数组。
但是我得到下面的代码编译没有错误。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n;
cin>>n;
int a[n][n];
a[n-1][n-1]=9;
cout<<a[n-1][n-1]<<endl;
return 0;
}
它也可以正常工作。在这里检查-> http://cpp.sh/6bies
有人可以帮助解决这个困惑吗?
解决方案
在 C++ 中是否允许创建具有运行时边界的数组?
这样的数组格式不正确。
但是我得到下面的代码编译没有错误。...而且它也可以正常工作。
C++ 标准不允许编译器成功编译格式错误的程序。显示诊断消息就足够了。这允许编译器扩展语言。
如果您查看示例的编译器输出,您会发现编译器确实告诉了您,这是 C++ 标准所要求的:
15:15: warning: array of array of runtime bound [-Wvla]
因此,您的编译器似乎支持运行时绑定的数组 - 甚至运行时绑定的数组数组 - 作为语言扩展。
如果您愿意,可以要求大多数编译器拒绝根据 C++ 标准格式错误的程序。
在动态存储中创建绑定的运行时数组是符合标准的。最简单的方法是使用std::vector
.
推荐阅读
- java - 如何遍历一个类中的多个枚举
- haskell - 没有因使用“打印”而产生的 (Show (Eval Int)) 实例
- asp.net - 来自第三方应用程序的不正确的 Content-Type 调用 serenity List api/function
- outlook-addin - 如何在 Outlook for Web 的菜单栏中显示加载项图标?
- html - 如何使用列数 CSS 在 WordPress 中创建大小相等的 HTML 单元格库?
- chart.js - CHART.JS 可编写脚本的 backgroupColor 属性
- c# - 从异步任务方法返回 false
- spring - Spring AOP 异常处理程序 - 仅执行排序的第一个方面
- php - 为什么我在尝试使用 fetch 连接 Api 时收到“错误请求”错误 400?
- python - 如何从多个 For 循环中将项目添加到单个字典?