C++程序员通常不使用独立的引用变量或引用数据成员,引用最常见的用途是用于函数的参数。
默认的参数传递语义是值传递(pass-by-value):函数接收其参数的副本,修改这些参数后,原始实参将保持不变。
void swap(int first, int second) {
int temp = first;
first = second;
second = temp;
}
另一种是引用传递(pass-by-reference),传递的是指向原始对象的指针,即对象的地址,因此计算机无需生成副本,在函数体内修改引用传递参数,也会改变原始实参。
void swap(int& first, int& second) {
int temp = first;
first = second;
second = temp;
}
测试代码:
int x = 5, y = 6;
swap(x, y);
cout << "x = " << x << ", y = " << y << endl;
则使用值传递方式传参的输出结果是x = 5, y = 6
使用引用传递的输出结果是x = 6, y = 5,改变了原始参数
const引用传递:const引用参数的主要目的是效率。当值传递给函数时,便会生成一个该数据的副本;引用传递时,传递的是地址,无需生成副本。通过const引用传递,可以做到二者兼顾:即可以不生成副本(引用传递的特点),又可以不改变原始变量的值(值传递的特点)。
void printString(const string& myString) {
cout << myString << endl;
}
注意:
当只对于简单的内置类型,如int和double,且无需修改实参的时候用值传递。
当要修改实参时要使用引用传递。
如果你即想防止不必要的生成副本,提高效率,又不想改实参值,那么请使用const引用