作为常量传递的数组与作为常量的数组值之间有什么区别?
当每个值都是常量时,将一个指针数组传递给函数:
`void display(Fraction* const ar[], int size);`
一切正常但数组是常数
`void display(const Fraction* ar[], int size);`
编译器在调用函数时出现以下错误:
`error C2664: 'display' : cannot convert parameter 1 from 'Fraction *[3]' to 'const Fraction *[]'`
主:
int main()
{
Fraction* fArray[3];
Fraction* fOne = new Fraction();
Fraction* fTwo = new Fraction();
Fraction* fThree = new Fraction();
fOne->num = 8;
fOne->den = 9;
fTwo->num = 3;
fTwo->den = 2;
fThree->num = 1;
fThree->den = 3;
fArray[0] = fOne;
fArray[1] = fTwo;
fArray[2] = fThree;
display(fArray, 3);
system("pause");
return 0;
}
答案 0 :(得分:3)
这是FAQ。
请注意,const T* a[]
表示T const* a[]
,即您声明为const
的数组本身不是;相反,你已经声明了一个指向const
项目的指针数组。
基本上,如果语言提供了隐式转换T**
→T const**
,那么您可能会无意中尝试更改最初声明为const
的内容:
int const v = 666;
int* p;
int** pp = &p;
int const** ppHack = pp; //! Happily not allowed!
*ppHack = &v; // Now p points to the const v...