我知道 C++ 中的固定大小数组是在堆栈上分配的,并且我知道使用 new[] 关键字创建的动态大小数组将在堆上分配。
但是考虑一下这段代码:
std::cout << "Enter a length of the array: "
int length{};
std::cin >> length;
int arr[length]{};
for (int i{ 0 }; i < length; ++i)
{
arr[i] = i;
std::cout << arr[i] << ' ';
}
std::cout << '\n'
编译没有问题。那么我假设此类数组隐式放置在堆上是否正确?如果是这样,它是如何工作的,该数组使用的内存是否也在隐式释放后释放?
这不是标准 C++。
您使用的编译器支持在同一文件中混合使用 C 和 C++ 功能。对可变长度数组的支持是 C 功能。
变长数组通常存储在堆栈中。这或多或少相当于用
alloca()
分配数组。
(我建议避免使用可变长度数组。由于它们不是 C++ 的一部分,因此它们可能与某些 C++ 功能交互很差,并且大多数 C++ 编译器根本不支持它们。您可能想使用
std::vector
来代替。)