我可以在编译时不知道大小的情况下在堆栈上分配`std :: array`吗?

Pet*_*iak 2 c++

在堆栈上进行分配时,我不必一定要知道在编译时分配的C数组的大小。即我可以做到这一点:

void foo(size_t s) {
    uint8_t bar[s]; // `s` not known at compile time
    some_func_that_uses_bar(bar, sizeof(bar));
}
Run Code Online (Sandbox Code Playgroud)

但是,为了减少出错的可能性,我觉得我也应该可以使用C ++来做到这一点std::array,但是我还无法弄清楚该怎么做(也不知道是否可能)。

Sne*_*tel 5

不,你不能。C增加了对可变长度数组的特殊支持,但是C ++没有。使用可以得到类似的效果alloca(),但这不是标准函数,如果将它与需要特定对齐的类一起使用,则需要额外的工作,并且需要您手动调用构造函数和析构函数。

对于该用例,普通的C ++程序员将使用std::vector