先说数组引用:
一、从所谓的"数组降价"说起:
void test(int arr[20])
{
std::cout << sizeof(arr); // 4
}
而实际上:
int main()
{
int arr[20];
std::cout << sizeof(arr); // sizeof(int) * 4
}
然而,若是这样呢:
void test(int (&arrRef)[20])
{
std::cout << sizeof(arrRef); // sizeof(int) * 4
}
遗憾在于:
int main()
{
int a[20];
test(a); // ok
int b[10];
test(b); // Error
}
即,使用数组引用,限定了数组元素的个数。当然可以用函数模板尝试解决这个问题:
template <int size>
void test(int (&arrRef)[size])
{
for (int i = 0; i < size; ++i)
{
++arrRef[i];
}
}
int main()
{
int a[3];
test(a); // ok
int b[5];
test(b); // ok, too
}
用函数模板解决的弊端: 函数模板在编译时期实例化,调用多少个不同长度的数组,就会生成多少份实例代码;
定义一个数组引用类型: typedef int (&arrRef)[10];
二、 再说“引用数组”
标准暂不支持。
因此想类似这样的,就死心吧:
int i = 1;
int j = 2;
int& arrRef[] = {...}; // "int& arrRef[]" is wrong