传引用即就是为传入的参数取个别名,其不同于非引用传参(拷贝传参),并没有拷贝复制一份参数来供函数使用。
那么引用传参为什么是传入指针,我们来看这段代码:
#include <iostream>
int print(int& i) {
return i;
}
int main(){
int y = 1;
int x = print(y);
std::cin.get();
return 0;
}
代码逻辑很简单,无非是为print函数传入一个引用,接下来看一下其的汇编代码:
main函数所做的:
13行:将int值1放到栈中[rbp-8]位置 //故rbp-8是一个地址
14行:将[rbp-8]传给寄存器rax
15行:rax的值再传给寄存器rdi
print函数所做的:
4行:将rdi中的值传给此时栈空间中的[rbp-8]位置 //注意此时rdi里存的是一个地址值
5行:将栈空间[rbp-8]位置存的值传给寄存器rax //那么此时rax中的值也是一个地址值
6行:将栈空间[rax]位置存的值传给寄存器eax
完成了这些操作,此时在pint函数体内,我们也就可以通过操作寄存器eax来实现对参数i的管理,这即就是上文所说的传引用实际上是传入了一根指针(地址),这根指针指向了main函数中传入的实参。
以上是我的见解,望讨论。