Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有可能设置c++;函数返回值的数组大小 我对C++很陌生,请你耐心地听我说: 我希望将数组的大小设置为函数的输出,例如: //这不是实际的函数(如图所示) int getSizeInt(int size) { 返回大小; } int main() { CharCharray[getSizeInt(6)];//错误:*函数调用必须在常量表达式中具有常量值* 返回0; }_C++_Arrays - Fatal编程技术网

是否有可能设置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));