通过参考
当传递参数值,返回一个值返回给调用者,唯一的途径是通过函数的返回值。虽然这是适合在很多情况下,在很多情况下,更好的选择是可用的。这样的一种情况是写一个函数需要修改数组的值时(如数组排序)。在这种情况下,它是更有效和更明确的有功能的修改实际的数组传递给它,而不是试图回报对方。
允许函数来修改参数的值的一种方法是使用按引用传递。在通过参考,我们声明该函数的参数作为参考,而不是正常的变量:
1
2
3
4
void foo(const int &x)
{
x = 6; // x is a const reference and can not be changed!
}
通过const引用
以价值传递的主要缺点之一是,所有的参数通过值复制到参数。当参数是大的结构或类,这需要很多的时间。参考文献提供了一种方法来避免这种处罚。当一个参数是通过参考,参考是创建实际的参数(以最小的时间)并没有复制的值发生。这允许我们通过大型结构和类以最小的性能损失。
然而,这也是我们打开了潜在的麻烦。引用允许功能改变参数的值,在许多情况下是不可取的。如果我们知道一个函数不应该改变参数的值,但不想按值传递,最好的解决办法是通过const引用。
你已经知道,const引用是指不允许变量引用的被改变。因此,如果我们使用const引用作为参数,我们保证给调用者的功能将不会(不能)变化的论据!
下面的函数将产生编译器错误: