是否有可能设置c++;函数返回值的数组大小 我对C++很陌生,请你耐心地听我说: 我希望将数组的大小设置为函数的输出,例如: //这不是实际的函数(如图所示) int getSizeInt(int size) { 返回大小; } int main() { CharCharray[getSizeInt(6)];//错误:*函数调用必须在常量表达式中具有常量值* 返回0; }
这可能不可能,我真的不知道。我在谷歌上搜索了这个问题,一直在修补初始化数组的不同方法,但都没有用是否有可能设置c++;函数返回值的数组大小 我对C++很陌生,请你耐心地听我说: 我希望将数组的大小设置为函数的输出,例如: //这不是实际的函数(如图所示) int getSizeInt(int size) { 返回大小; } int main() { CharCharray[getSizeInt(6)];//错误:*函数调用必须在常量表达式中具有常量值* 返回0; },c++,arrays,C++,Arrays,这可能不可能,我真的不知道。我在谷歌上搜索了这个问题,一直在修补初始化数组的不同方法,但都没有用 是否有可能将C++数组大小设置为函数的返回值? 对 数组变量的大小必须是编译时常量。如果函数是constexpr,且其参数本身是常量表达式,则函数调用是常量表达式 函数不满足这些约束,因此其返回值不能用作数组变量的大小 但是,它可以用作动态数组的大小。创建动态数组的最简单方法是使用std::vector(std::string,如果您想表示文本,则可以考虑使用该方法): std::vector ch
是否有可能将C++数组大小设置为函数
的返回值? 对 数组变量的大小必须是编译时常量。如果函数是constexpr
,且其参数本身是常量表达式,则函数调用是常量表达式
函数不满足这些约束,因此其返回值不能用作数组变量的大小
但是,它可以用作动态数组的大小。创建动态数组的最简单方法是使用std::vector
(std::string
,如果您想表示文本,则可以考虑使用该方法):
std::vector charArray(getSizeInt(6));
在编译时,C++中的数组大小必须是常数,所以答案是:
如果函数是constexpr
,并作为常量表达式的一部分调用,则可以使用它静态设置数组的大小。例如:
constexpr std::size\u t square(std::size\u t n){return n*n;}
int my_数组[compute_size(2)];//4整数数组
但是,这只有在编译时预先知道所有数据时才有效。如果您使用的是运行时值,例如来自文件或用户的内容,那么这将不起作用——您必须求助于其他形式的动态内存来处理这一问题。在C++中,通常这将由一个容器来处理,例如:<代码> STD::vector < /C> >:
std::size\u t compute\u size(){/*一些基于运行时的计算*/}
// ...
auto-vec=std::vector{};
向量保留(compute_size());//提前预订尺码
向量向后推(…);//向后推送或放置所需的任何数据
如果您提前预留
尺寸,只要不超过容量,您就可以避免因后推/后置
而产生的重新分配成本
或者,您可以通过执行以下操作之一初始化条目向量:
auto-vec=std::vector{};
向量调整(N);
或
auto-vec=std::vector(N);
这里的区别在于,reserve
只会更改容量,这意味着在插入元素之前,实际上无法索引到N
,而resize
或vector(N)
将零初始化(基本类型,如int)或默认构造(聚合/类类型)N
实例,允许索引
一般来说,
reserve
+push_back
更好,除非您知道需要默认构造的/zero值。不,数组大小必须是常量表达式。如果可以在编译时计算函数,请使用constexpr
。否则,最好的方法可能是使用std::vector
。不应该使用可变长度数组。从技术上讲,使用C样式数组可以做到这一点,但我真的不推荐使用。int*a=malloc(sizeof(int)*s)
。正如其他答案中所建议的那样,使用vector
会更好
std::vector<char> charArray(getSizeInt(6));