首页 > 解决方案 > 我可以在编译时不知道大小的情况下在堆栈上分配`std::array`吗?

问题描述

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

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

但是,为了减少出错的可能性,我觉得我也应该能够使用 C++ 来做到这一点std::array,但我无法弄清楚如何(甚至是否可能)。

标签: c++

解决方案


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

对于那个用例,普通的 C++ 程序员会使用std::vector.


推荐阅读