如何创建长度由常量参数指定的数组

How can I create an array whose length is specified by a const argument?

本文关键字:参数 常量 数组 何创建 创建      更新时间:2023-10-16

我有一个函数:

void f(const size_t &len){
double arr[len];
}

但它不起作用,因为我从len那里得到消息,"表达式必须有一个常数值"。如果我不想创建全局变量len,我该如何解决这个问题?

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);
}

您需要创建一个动态数组(在免费商店上(。使用存储器分配函数之一。

double* arr = new double[len];

但你必须自己跟踪记忆的释放!!因此,您必须将指针保存为全局变量或类成员,以便稍后使用删除它

delete[] arr;
arr = nullptr;

这就是c++中动态数组的管理方式,但静态数组是在指令块的堆栈上创建的,它们会自动销毁。它们的大小必须在编译时定义,而不是在运行时定义。