【发布时间】:2021-10-17 20:11:31
【问题描述】:
当我们在编译时不知道输入的确切大小时,我们会创建动态数组,对吗? 但是我们不能不使用动态数组来解决这个问题吗?例如:
cout<<"Enter Size of Array";
cin>>x;
int arr[x];
通过使用上面的代码,我们可以创建一个 int 数组,数组的大小取决于用户输入(即 x)。如果这段代码解决了我们的问题,那么动态数组需要什么?
我是编程新手,所以试着简单地解释一下。谢谢。
【问题讨论】:
-
该代码不符合标准(并且不适用于例如:Visual Studio 的 C++ 编译器)
-
这里的问题是
int arr[x];和x不是编译时间常数是 C++ 的非标准扩展。我建议避免这种情况,除非您确定所有编译器都希望编译支持此功能的代码(即便如此,这可能会使习惯于不支持此功能的不同编译器的其他人感到困惑)。 -
最好将编译器配置为拒绝非标准 C++ 扩展,尤其是在学习时。
-std=c++20 -pedantic-errors可以工作(如果您的编译器不支持c++20,则可以使用较低版本)。还可以使用-Wall -Wextra启用警告。 -
它拥有普通原始数组的所有缺点——大小未知、衰减到ptr、传值,只需使用
std::vector。 VLA 也是在堆栈上实现的 AFAIK(如alloca),因此它们的大小非常有限。
标签: c++ arrays heap-memory