C++ 核心指南提到了一个叫做 stack_array
的东西。 .它的用法如下:
const int n = 7;
int m = 9;
void f()
{
std::array<int, n> a1;
stack_array<int> a2(m); // A stack-allocated array.
// The number of elements are determined
// at construction and fixed thereafter.
// ...
}
但是如何实现这样的类呢?我们如何在运行时动态确定堆栈大小?
最佳答案
据我所知,stack_array
是对无法使用标准 C++(按照当前标准)实现的假设类的建议。它的实现需要(当前)非标准编译器特定的支持,我怀疑这种非标准支持是否存在。
您可以获得的最接近的是一个宏,它包装了对 alloca
的调用(一种非标准功能,许多编译器都支持)。有关具体实现的链接,请参见 roalz 的答案。我不确定这种方法是否可以实现 VLA 无法实现的任何安全性(另一个非标准功能,许多编译器都支持)——这并不是说 VLA 可以安全使用。
关于c++ - C++ 核心指南中的 stack_array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41978790/