在函数参数中fun(const int& n)和fun(int n)有什么区别?

老开山 2010-10-21 01:45:46
问题:fun(const int& n)和fun(int n)有什么区别?
我知道对于class来说, const int&是为了防止拷贝构造,同时防止函数内修改原参数值;
但对于内建类型int,fun(int n)本身并无拷贝构造,值参的传递拷贝也不影响性能。
不知fun(const int& n)这样的用法会有什么好处?(我在有的地方看到这种用法)
...全文
591 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
myjackheroes 2013-04-06
  • 打赏
  • 举报
回复
没人会写const int&,在空间上两者一样,在时间上const int&多一层间接, 效率更低,在任何情况下请使用int或者const int const int&和 int&区别是后者不支持临时变量到int&的转换,const版本可以
jiandingzhe 2013-04-06
  • 打赏
  • 举报
回复
这种用法很奇怪:传递基本类型的引用进去,却又不修改,那还不如直接按值传递,没准还能省几个字节的栈。
迪司匹林 2013-04-05
  • 打赏
  • 举报
回复
引用 7 楼 luciferisnotsatan 的回复:
int 是传值。int &是传引用。
你好,能不能告诉我 函数中用这个传递参数是有什么区别? 比如compute(int *n),compute(int &n),compute(int n) 主要是前两者有什么不同? 谢谢
追求执着 2011-10-28
  • 打赏
  • 举报
回复
加const 函数内部不能改变其值!!
也是个很好的习惯!!
fmworld 2011-10-28
  • 打赏
  • 举报
回复
针对这个内置数据,只有习惯上的差别吧
Saingel 2011-10-28
  • 打赏
  • 举报
回复
效率都差不多,前者没什么意义
vilnies 2011-10-28
  • 打赏
  • 举报
回复
fun(const int& n)和fun(const int n)对内建类型传参性能是一样的。
如果n在堆上,而且被多次访问,前者效率肯定比后者要低。
hufenlin1 2011-10-28
  • 打赏
  • 举报
回复
如果算重载 普通调用一定会产生二义性!
ilikework 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lazy_2010 的回复:]

对于 int ,很反感使用 const int& 传递参数;没有意义
[/Quote]

但是, 用&后编译出来的exe要小些啊,还是有些意义的
mymtom 2010-10-21
  • 打赏
  • 举报
回复
也许是学C++学入迷了,一切都用引用,不能修改就加const
fun(const int& n) 与 fun(int n)区别不大。
也许是为了与class的 func2(const class FOO & ref)的风格保持一致吧
zzcmx2008 2010-10-21
  • 打赏
  • 举报
回复
fun(const int& n)和fun(int &n)的区别,最好找专门的资料去看,以前看过也和朋友讨论过,现在原因都忘的差不多了,建议你加一个专门讨论C++的群,可以实时的讨论。
zzcmx2008 2010-10-21
  • 打赏
  • 举报
回复
其实更应该讨论一下fun(const int& n)和fun(int n),还有fun(int &n)
fun(const int& n)传的是实参本身,const控制参数在函数内不能被修改。
另外,还可以直接传值进去,如fun(3),而fun(int &n)就不能直接传值进去。
smokingchen 2010-10-21
  • 打赏
  • 举报
回复
不好意思打错了,是effective
smokingchen 2010-10-21
  • 打赏
  • 举报
回复
常引用是个好东西,好处在《effictive C++》(或是《more effictive C++》)中有详细讲解。lz可以参考看看。
harderman 2010-10-21
  • 打赏
  • 举报
回复
如果是内置类型的话,就没有什么区别了.
skuall2005 2010-10-21
  • 打赏
  • 举报
回复
fun(const int& n)和fun(int n)有什么区别?
既然你都知道了 还迷惑什么

在c++中 int也是一个类 不相信你试下int是不是有构造函数
lazy_2010 2010-10-21
  • 打赏
  • 举报
回复
对于 int ,很反感使用 const int& 传递参数;没有意义
zrcvic 2010-10-21
  • 打赏
  • 举报
回复
其实 int 型使用 void f(const int &) 还不如 void f(int) 效率高,所以如果是内置基本数据类型就直接传值好一些。

不过所幸差别不大。使用 const int & 的一个好处是和类类型保持一致,这样形如 template<typename T> void f(const T &) 就可以既接受 类类型 又接受 int……
shenchenman 2010-10-21
  • 打赏
  • 举报
回复
传一个引用的常量和传一个值,效果是一样的,都是不会改变实参的值,区别是传递引用效率高,因为传值需要一个拷贝过程,把实参拷贝给形参,需要再开辟一个内存;传引用就不同了,因为实参和形参就是一个东西,只是两个名字而已,内存是一块内存。
Jim_King_2000 2010-10-21
  • 打赏
  • 举报
回复
据我所知,没啥好处。
加载更多回复(7)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧