函数形参是类对象,调用该函数时形参为什么可以是引用类型?
函数形参是类对象,调用该函数时形参为什么可以是引用类型?如intx是classA的一个数据成员,有一个含参结构体函数给x赋值,类外面有函数voidf(Aa){a.x=1;...
函数形参是类对象,调用该函数时形参为什么可以是引用类型?如int x是class A的一个数据成员,有一个含参结构体函数给x赋值,类外面有函数void f(A a){a.x=1;},main函数中有A a(4); A&b=a; f(b);此时输出a.x,编译通过输出4,所以为什么引用b能赋给f函数的形参? 因为以往都是将对象赋给形参引用类型的。新手求指点谢谢。
展开
2个回答
展开全部
A a(4);
A &b = a;
上一行定义一个对 a 的引用,也就是说 b 的地址和 a 一样,而 a.x 的值,应该在上一步的对构造函数的调用时已经设置成 4 了;
然而,下面这一行代码是没有效果的
f(b);
原因就是,f 这个函数的参数 a 是值传递的,意思就是说在调用时会创建 b 的一个副本给 f,结果 f 处理的就是这个副本,而非原本的 b
这就是为什么你之后再输出 a.x 或者 b.x,值是 4 而不是 f 里指定的 1
A &b = a;
上一行定义一个对 a 的引用,也就是说 b 的地址和 a 一样,而 a.x 的值,应该在上一步的对构造函数的调用时已经设置成 4 了;
然而,下面这一行代码是没有效果的
f(b);
原因就是,f 这个函数的参数 a 是值传递的,意思就是说在调用时会创建 b 的一个副本给 f,结果 f 处理的就是这个副本,而非原本的 b
这就是为什么你之后再输出 a.x 或者 b.x,值是 4 而不是 f 里指定的 1
追问
好的,原来我将引用跟指针搞混了,以为a和b是不同的类型f(b)会报错,多谢指点。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询