如何创建长度由常量参数指定的数组
How can I create an array whose length is specified by a const argument?
我有一个函数:
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++中动态数组的管理方式,但静态数组是在指令块的堆栈上创建的,它们会自动销毁。它们的大小必须在编译时定义,而不是在运行时定义。
相关文章:
- 如何创建长度由常量参数指定的数组
- 通过常量引用传递参数的矩阵模板类
- 具有常量引用参数的函数模板专用化
- 使用自动推导的 lambda 参数作为常量表达式
- C++:常量引用参数
- 常量参数"real"常量吗?
- 常量参数存储在哪里 (C++)?
- 常量函数,当其参数是对文字类型的引用时
- 区分接受常量参数的函数引用/指针和与函数参数同名的非常量参数
- 必须非常量别名参数及其默认参数常量
- 字符串参数常量字符* 和常量 wchar_t*
- 可选参数常量引用重新分配
- 推导模板化类参数的模板参数:常量问题
- 从函数参数常量字符串 (&) 设置值
- 为什么我必须声明这些引用参数常量或按值传递
- C++使用一个参数常量重载
- 如果要执行const_cast,为什么要制作参数常量?
- 模板非类型参数常量限制筛选器库
- 标记方法指针/引用参数常量真的会显著影响性能吗
- 当函数参数常量引用 T 时,为什么 T 的模板参数推导'skips'数组元素的恒定性?