如何创建由const参数指定长度的数组?

时间:2020-02-20 10:33:05

标签: c++ arrays constants

我有一个功能:

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

但是它不起作用,因为我从len得到消息,“表达式必须具有恒定值”。如果我不想创建全局变量len,该如何解决这个问题?

2 个答案:

答案 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 ++管理动态数组的方式,但是静态数组是在指令块的堆栈上创建的,并且它们会被自动销毁,并且它们的大小必须在编译时而不是在运行时定义。

相关问题