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]
。