提问者:小点点

哪些编译器支持在运行时大小固定的数组,哪些编译器不支持? [副本]


我一直使用的数组的大小是由用户在输入中询问的,例如:

int main(){
    int n;
    cin>>n;
    int arr[n];
}

我从未遇到过这种方法的任何问题,但是现在我读了很多文章,说C++不支持这种语法,因为C++在编译时需要数组大小,或者数组必须使用new关键字动态生成。 如果上面的代码:

    新编译器支持
  1. ,而旧编译器不支持。 如果是,则在哪个版本之后支持此语法?
  2. 在堆中动态分配数组,还是在堆栈中静态分配内存?

共3个答案

匿名用户

我点击了https://godbolt.org/上的大多数编译器,似乎只有Microsoft Visual Studio编译器拒绝了它。 几个平台上的GCC和Clang都可以使用这段代码。

注意,它只是一个额外的支持,两个编译器可以决定停止接受代码,因为它是非标准的。

数组将位于两个编译器的堆栈上。

匿名用户

现代C++编译器通常不支持在编译时大小未知的数组。 像堆栈上分配内存C样式数组,使用“new”关键字“或像C中的malloc将它们分配到堆上,尽管您需要处理它们的删除。您可能想要使用的是std::vector,它位于”vector“头上,它将动态地分配堆上的内存,允许在运行时调整大小,并在它超出范围时处理它自己的删除。

匿名用户

使用任何编译器都应该支持的std::vector

#include <vector>

int main(){
    int n;
    cin>>n;
    std::vector<int> arr(n);

    cout << "the size of my array is:" << arr.size();
}