首页 > 解决方案 > 将整数数组作为参数传递的 C++ 错误

问题描述

Range-for-statement 的后续操作无法使用数组函数参数构建范围表达式

原来的错误是:

错误:无法使用数组函数参数“arr”构建范围表达式,因为数组类型“int []”的参数被视为指针类型“int *”

失败的代码:

void print(int (&arr)[int]){
    for(int x: arr)
        cout<<" "<<x;
    cout<<endl;
}

固定代码:

template<int N>
void print(int (&arr)[N]){
    for(int x: arr)
        cout<<" "<<x;
    cout<<endl;
}

我的问题是,为什么我们必须这样修复它?我不明白什么int (&arr)[int]意思。

标签: c++arrays

解决方案


这背后的基本原理是 C++ 只允许 constepr 用于数组维度。模板版本确保这N是一个 constepr(编译时间常数),而不正确的版本让我们认为您打算使用运行时整数值作为数组大小 - 不幸的是,这在 C++ 中是被禁止的


推荐阅读