C++函数形参是引用但是实参用的是变量,为什么函数能调用成功?

#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;这个操作。也就是在形实结合的时候,这个引用才被定义。

想法正确!

猜你喜欢

转载自blog.csdn.net/o707191418/article/details/84555218