参考《C++ Primer》Section 7.2 Argument Passing中的内容。
nonreference patameters非引用型参数
先拷贝一份,然后在拷贝的这份参数上进行操作。
- 不对实际的参数进行改变,这份拷贝在函数结束时生命周期终结。
- 因为传递非引用型的参数会拷贝数据,所以如果传递string, vector或者其他容器类型,将会带来时间和空间的开销。
- 如果传递的参数是非引用型的指针,如果没有*指针运算符,也不会改变指针所指向的内容,因为依然是一份参数的局部拷贝。
- 还有可能有对象无法拷贝的情况。
reference parameters 引用型参数
引用只是别名而已。
- 引用作为输出参数,可以返回返回值之外的信息。
- 使用(const)引用避免拷贝。如果说使用参数引用的目的只是为了避免拷贝的发生,那么引用应该是const的。
- const引用更加灵活(其实应该叫做对于const对象的引用)。比如说,const引用可以初始化为一个常数,可以作为右值,普通引用如果初始化为不同类型的值会报错,const类型的引用是可以的。
- 传递对指针的引用,就可以不使用*来改变指针指向的值。