当参数是一个数组类型的引用时,数组长度成为参数和实参类型的一部分编译器检查数组实参的长度与在函数参数类型中指定的长度是否匹配
// 参数为10 个int 的数组
// parameter is a reference to an array of 10 ints
void putValues( int (&arr)[10] );
int main() {
int i, j[ 2 ];
putValues( i ); // 错误: 实参不是 10 个 int 的数组
putValues( j ); // 错误: 实参不是 10 个 int 的数组
return 0;
}
因为数组的长度现在是参数类型的一部分所以putValues()的这个版本只接受10 个int
的数组这限制了可以作为实参被传递给putValues()的数组的种类
在C++中数组永远不会按值传递它是传递第一个元素准确地说是第0 个的指针
例如如下声明
void putValues( int[ 10 ] );
被编译器视为
void putValues( int* );
数组的长度与参数声明无关