我一直在使用用户在输入中询问其大小的数组,例如:
int main(){
int n;
cin>>n;
int arr[n];
}
我从来没有遇到过这种方法的任何问题,但现在我读了很多文章说 C++ 不支持这种语法,因为 C++ 在编译时需要数组大小,或者必须使用new
关键字动态地制作数组。如果上面的代码有人可以说清楚:
- 新编译器支持,旧编译器不支持。如果是,那么在哪个版本之后支持此语法?
- 在堆中动态分配数组还是在堆栈中分配静态内存?
我一直在使用用户在输入中询问其大小的数组,例如:
int main(){
int n;
cin>>n;
int arr[n];
}
我从来没有遇到过这种方法的任何问题,但现在我读了很多文章说 C++ 不支持这种语法,因为 C++ 在编译时需要数组大小,或者必须使用new
关键字动态地制作数组。如果上面的代码有人可以说清楚:
我点击了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();
}