Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是;“非常量合格”;什么意思?_C++ - Fatal编程技术网

C++ 什么是;“非常量合格”;什么意思?

C++ 什么是;“非常量合格”;什么意思?,c++,C++,我试图通过引用funcA传递数组 void funcA(int(&a)[], int k); int main() { int n = 5; int x[5]; funcA(x, n); return 0; } 然而,当我尝试这样做时,它抛出了这个错误 A reference of type "int (&)[]" (non const-qualified) cannot be initialized with a val

我试图通过引用
funcA
传递数组

void funcA(int(&a)[], int k);

int main() {
    int n = 5;
    int x[5];
    funcA(x, n);
    return 0;
}
然而,当我尝试这样做时,它抛出了这个错误

 A reference of type "int (&)[]" (non const-qualified) cannot be initialized with a value of type "int [5]"

我试图找到“非常量合格”的含义,但没有任何好的解释。有人能解释一下这是什么意思吗?谢谢。

首先,不能引用未绑定大小的数组。最接近的是对指针(指向数组)的引用,即
int*(&a)
。这仍然会产生问题,因为
a
不是常量,而传递的参数
x
是常量(数组的位置)-这实际上就是问题中的编译器错误所指的。因此,我们需要
a
作为指向非常量数组的常量指针的引用,即:

void funcA(int * const (&a), int k)
{
    a[k-1] = 0;  // Just a dummy example
}

int main() {
    int n = 5;
    int x[5];
    funcA(x, n);
    return 0;
}
应该提到的是,使用更常见的数组传递形式没有任何不利之处:

void funcA(int *a, int k)

编译器不能将<代码> int [5 ]<代码>转换为<代码> int(&)[]/COD>,但我不知道如何修正这一点,对于如何通过引用< < /代码>传递静态分配数组> >错误消息是伪造的(使用XL或PGI C++)。这是因为C++中没有引用未知大小数组的原因。因此,
int(&)[]
是不可能的。使用
int[]
int*
int(&)[5]