1. 数组引用既可以作为参数传递,又可以当做 函数返回值。
在这先举个例子,通过模板传入的类型和数组大小可以变的。其他一些关注数组引用的介绍后续再补。
例1:
#include <iostream>
template<typename T, int N>
//auto getArrayRef(T(&arr)[N])->T(&)[N] //C++11
decltype(auto) getArrayRef(T(&arr)[N]) //C++14
{
return arr;
}
int main()
{
const int arr1[] = { 1, 2, 3 };
auto& r1 = getArrayRef(arr1);
auto r2 = getArrayRef(arr1);
auto size1 = sizeof(r1);
auto size2 = sizeof(r2);
const int arr2[] = { 1,2,3,4,5,6,7,8,9,0 };
auto& rr3 = getArrayRef(arr2);
auto size3 = sizeof(rr3);
return 0;
}
在这里通过函数返回数组引用的时候,给r1和r3加上&引用符,给r2不加引用符,结果是不一样的。在getArrayRef函数中sizeof(arr)的值就是数组本身的大小,而不是一个int指针的大小。关于auto的介绍可以看<<Moedern effective c++>>前三章的介绍,很详细也很经典。
结果如下(sizeof(int)大小为4):