C++核心指南中的stack_array

Ziz*_*Tai 12 c++ c++11

C++核心指南提到了一个名为a的东西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.
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但是如何实施这样的课程呢?我们如何在运行时动态确定堆栈大小?

eer*_*ika 6

据我所知,stack_array建议使用标准C++(截至当前标准)无法实现的假设类.它的实现需要(当前)非标准的编译器特定支持,我怀疑这种非标准支持甚至存在.

最接近的是一个宏,它包含一个调用alloca(非标准功能,许多编译器都支持).请参阅roalz的答案,获取具体实施的链接.我不确定这种方法是否可以达到VLA无法实现的任何安全性(许多编译器支持的另一个非标准功能) - 这并不是说VLA可以安全使用.

  • 那真是怪了.指南似乎强烈暗示这是一个存在的东西,因为它们确实鼓励人们使用它. (5认同)