1.非引用形参通过复制实参值创建和定义函数的局部对象,从而对形参的操作不改变实参值。因为是复制初始化在形参前加const无影响。type function(type2 v) 和type function(const type2 v)是等价的。这一点在函数重载时也要注意,如果同时出现上述的两个函数则是重复定义而不是重载。
2.引用形参是实参的别名,从而对形参的操作改变实参值。用途:第一,大型的参数通过复制初始化效率低时用引用参数;第二,对于一些不能复制初始化的参数;第三,可以通过增加形参返回额外的信息。 注意:type function(type2 v) 和 type function(const type2 v)是不同的。
3.const& :一般不需要修改实参时用const引用。这主要是考虑到非const引用形参的如下缺点:第一,传递的实参必须与形参类型完全相同,而不包含可以隐式转换的类型;第二,传递的实参不能是const,右值。
4.指向指针的引用 type* &v;
5.(1)非引用数组形参:int*, int[],int[n]。这三个是等价的,都传递指向第一个元素的指针。这样容易产生越界。如何防止越界呢?第一,通过结束标记检测数组的结束,如C风格字符串;第二,用标准库规范,传递第一个和最后一个的下一个元素的指针做参数;第三,显示传递数组大小的形参。
5.(2)引用数组形参:type (&arr)[n]; 注意两点:一是,圆括号是必须的,因为下标运算符的优先级更高;二是,表示数组元素个数的n是必须的,因为引用是数组别名,而数组是固定长度的。
6.默认实参:第一要考虑位置,第二,如果提供实参,则它覆盖默认的实参值。
文章来源:http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!242.entry