c++ - 我可以在编译时不知道大小的情况下在堆栈上分配`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++ 没有。您可以使用 获得类似的效果alloca()
,但这不是标准函数,如果您将它与需要特定对齐的类一起使用,并且需要您手动调用构造函数和析构函数,则需要额外的工作。
对于那个用例,普通的 C++ 程序员会使用std::vector
.
推荐阅读
- css - 单选按钮中的自定义 CSS 不起作用显示复选框而不是单选按钮
- arrays - 用字符串中的空格迭代一个bash数组?
- html - 为什么我使用浮动正确时会有间隙?
- javascript - 动态添加数据到两个或多个选择
- android - 我如何对 recyclerview 应用限制?
- java - 球体体积的计算不正确
- c++ - 使用不同的行执行 2D dft 时出错,使用 FFTW 的 col 大小
- powershell - 如何在 Powershell 中对 3000 万条 csv 记录进行排序
- javascript - 如何在angular8+中调用innerHtml中的post方法脚本?
- javascript - 当屏幕尺寸超过一定宽度尺寸时如何运行javascript?