我有一个功能:
void f(const size_t &len){
double arr[len];
}
但是它不起作用,因为我从len得到消息,“表达式必须具有恒定值”。如果我不想创建全局变量len,该如何解决这个问题?
答案 0 :(得分:3)
C ++不支持可变长度数组。如果len
是编译时间常数,建议您将std::array
与模板一起使用,如下所示:
template<size_t len>
void f(){
std::array<double, len> arr;
//use arr
}
您将这样使用它:
int main()
{
f<5>();
}
请注意,在我的示例中,5
是一个编译时常量。如果在编译时不知道数组的大小,请使用std::vector
。您可以这样做:
void f(const size_t len){
std::vector<double> arr(len);
//use arr
}
int main()
{
size_t variableLength = 0;
std::cin >> variableLength;
f(variableLenght);
}
答案 1 :(得分:0)
您需要创建一个动态阵列(在免费商店中)。使用内存分配功能之一。
double* arr = new double[len];
但是您必须自己跟踪内存释放!!因此,您必须将指针另存为全局变量或类成员,才能稍后使用
将其删除delete[] arr;
arr = nullptr;
这是用c ++管理动态数组的方式,但是静态数组是在指令块的堆栈上创建的,并且它们会被自动销毁,并且它们的大小必须在编译时而不是在运行时定义。