c++的类里面,常引用作为函数参数和直接用类的对象做形参有什么区别?比如我写一个类p,然后函数写double fun(const p & u){……}这个和double fun(p u){……}的运行结果一样,不过我想他们本质上应该是有区别的吧。求大神解释
如果你的返回值是p或者u,那么你就知道不一样了,你试试看
区别在参数的类型,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:则会重新拷贝赋值,其中的差别就是有一个内存的浪费
引用是别称,结果一样但效率更高,节省内存
仅仅是因为传参的时候引用的效率比较高,因为它不需要拷贝一份临时的变量