指向数组的引用 const char(&p)[a]
问题起源:
如何在函数内,也能获取数组的大小信息
如果是定义一个数组a后,使用如下方法即可获取大小信息
cout << sizeof(a) / sizeof(a[0]);
但是如果作为一个参数传入到一个函数中,比如
void f(int* a);
void f(int a[]);
则均无法在函数内用上述代码获取数组的大小信息,此时获取到的只是指针大小(具体大小与环境设置有关)。
原因就在于数组进入函数时会退化为指针以节省空间。
为使其不发生退化,以保存其大小信息,想到使用引用。
但不能直接声明数组的引用(如下):
void f(int (&a)[]);
原因是类型不完整——因为作为一个数组而言,没有大小信息
因此利用模板特性,为其增加大小的信息:
template<int SIZE>
void f(int (&a)[SIZE]);
(注:数组的引用和引用的数组不同,详情可见:[C++]关于数组的引用和引用的数组 )
文字终究词不达意,直接上代码吧,意思都在代码里了:
核心在于如何看待这几个:
int* p ; int* (&p), int (&i_ref)[] ;
char* p; char * (&p) , char (&c_ref)[],
const char* p; const char * (&p) , const char (&c_ref)[]
//int* p ; int (&i_ref)[] ; char* p; char (&c_ref)[]
void fooCharP<