c++类的一个小问题求大神给解释

c++的类里面,常引用作为函数参数和直接用类的对象做形参有什么区别?比如我写一个类p,然后函数写double fun(const p & u){……}这个和double fun(p u){……}的运行结果一样,不过我想他们本质上应该是有区别的吧。求大神解释

c++

12个回答

如果你的返回值是p或者u,那么你就知道不一样了,你试试看

  1. 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 当引用作为参数传入后,函数中对参数的操作,也会影响到传入变量
  2. 而实参, 会在函数copy一份, 并且在方法中修改传参不会改变传入的值

区别在参数的类型,const P&对于类类型来说,效率更高,少了copy复制操作

第一种情况是使用参数指向的原来的那个对象,而第二种情况其实操作的是一个副本对象。

2楼3楼4楼的回答都很正确哈,楼主把3为的信息都理解一下就ok了。引用主要用于数值传递,一个参数作为引用变量传递给函数,经过函数的一系列处理后,这个引用变量的数值发生变化,此引用变量无需使用return方式返回也会自然的保存改变后的数值,楼主可以自己试验做一下就明白了。

const p& 和 p 的区别是"p&"引用指的是你传进去的对象本身,而"p"在使用的时候会复制对象,例如p p1,如果函数形参类型是const p&,那么传进去的对象就是
p1本身,反之,如果函数形参类型是p,那么在传进去的对象是p1的复制对象,而不是p1对象本身。还有const p&和p&的区别表示p对象能不能被函数修改。

http://blog.csdn.net/tianxiaolu1175/article/details/46848999
这篇博客说得很清楚,可以去看看

const p& 和 p 的区别是"p&"引用指的是你传进去的对象本身,而"p"在使用的时候会复制对象,例如p p1,如果函数形参类型是const p&,那么传进去的对象就是
p1本身,反之,如果函数形参类型是p,那么在传进去的对象是p1的复制对象,而不是p1对象本身。还有const p&和p&的区别表示p对象能不能被函数修改。

double fun(const p & u){……}
表示参数u是对实际参数一个常引用。调用函数fun()时,u成为实际参数的一个别名,没有对象复制,在函数fun()内,u相当于一个常对象,可以引用,但不可修改。利用u只能调用u的常成员函数,也就是函数头部后边有const修饰的成员函数,其他的成员函数不可调用。
double fun(p u){……}
表示参数u是一个实际参数的复制品。调用函数fun()时,u成为实际参数的复制品,复制之后,u和实际参数是两个相互独立的对象。而且由于没有const限定u,u是一个可以引用、可以改变的对象。

const p&u:引用相当于是使用别名,传入的参数使用的是原来的内存
p u:则会重新拷贝赋值,其中的差别就是有一个内存的浪费

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!