C++11数组引用作为函数参数
在看<<C++ prime>>中遇到了一个问题,看到一半的时候记得书中讲数组做为函数参数时应当提供额外的形参,可以断定数组的开始和结束。 1、数组做为函数参数的三种方法 //额外传递一个数组大小的形参 int func(int a[],size_t n); //提供一个数组结束的断定符,例如:C风格的字符串字面值用'\0'断定字符串结束 int func(int a[]);//数组a中必须要有断定符 //使用C++标准库的begin和end函数来获取一个指向数组首元素和尾元素 之后 的指针,类似于迭代器 int func(begin(a),end(a)); 2、问题 我们仔细观察最后一种方法,使用begin和end函数的方法,有没有发现什么?? 既然begin和end是一个函数,而且他们的形参也是一个数组,但是他们为什么没有提供额外的参数呢?他们是怎么得到指向尾元素后面的指针的?想想我们自己会怎么实现: 我们自己实现时无非是通过首元素的地址加上数组大小得到,可是,begin和end并没有提供数组大小的形参作为参数呀。 上述问题的答案,其实引出了第四种解决方案,查看C++头文件,begin和end定义在iterator头文件中,gcc是定义在bits文件夹下的range_access.h头文件中,下面是截取该头文件的部分内容。 // <range_access.h> -*- C++