#include<iostream>
void test(int&);
int main()
{
using namespace std;
int a = 5;
test(a); //这里传递的不是引用,是变量
return 0;
}
void test(int& t)
{
using namespace std;
cout << "& has been passed here. t is " << t << endl;
}
函数test()的形参是引用&,但是在调用时实参用的是变量a,为何这种调用合法?
多加了几行测试了一下
void test(int&);
int main()
{
using namespace std;
int a = 5;
test(a); //这里传递的不是引用,是变量
cout << "after the func a is " << a << endl;
return 0;
}
void test(int& t)
{
using namespace std;
cout << "& has been passed here. t is " << t << endl;
t = 6;
}
引用t实质上成了a的引用,目前的想法是在参数传递的过程中进行了赋值
&t = a;
将t作为a的引用,再执行函数操作,不知道事实是否如此。
刚刚又看了一遍清华的C++引用课程,瞬间明白,有几个点:
(1)引用必须在定义时直接初始化,不能先定义之后再初始化,引用是不可更改的。
(2)函数在调用时候才会给形参分配内存空间,也就是调用之前函数内的局部变量不存在。
综合这两个点就知道,在函数调用时才会给形参分配存储空间,那么当函数调用时,这个引用t才被创建,然后立即用实参对其进行初始化,也就是上面写的&t = a;这个操作。也就是在形实结合的时候,这个引用才被定义。
想法正确!