传入的是值还是引用?

rottenscar 2009-10-21 05:44:40
写一个函数
void function(cls a){...}
void function(cls & a){...}
第二个函数是不是永远都不会执行?有没有什么语法去强制执行第二个函数?

PS:这个问题有点变态……

问题在我写一个模板函数用到
template< class arg >
void function( arg a)
这里我不知道是用值还是引用好了,因为如果arg是int的话引用反而会慢。
...全文
116 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
huyuanmei123 2009-10-22
  • 打赏
  • 举报
回复
没有单用引用来做重载的吧,要是想提高效率而用引用的话,建议改成const&通过const来重载函数
cattycat 2009-10-22
  • 打赏
  • 举报
回复
template < class arg >
void function( arg a)

也可以定义成引用的。对内置类型传值和引用效率相差不大,对对象最好还是用引用,拷贝的话效率就低了。
huqinglu123 2009-10-22
  • 打赏
  • 举报
回复
有引用的时候一般会优先选择引用
taodm 2009-10-22
  • 打赏
  • 举报
回复
呃,看来楼主是没看过《modern c++ design》了,对于第二个问题是小case了。
boost库里都有现成的了。
信念 2009-10-22
  • 打赏
  • 举报
回复
可以用引用的地方尽量用
lnuyasha_hrb 2009-10-22
  • 打赏
  • 举报
回复
当使用类类型的时候,无论你使用了引用符号还是没有使用引用符号,使用类名就相当于引用了该类的对象
illuminati 2009-10-21
  • 打赏
  • 举报
回复
顶帖子
olncy 2009-10-21
  • 打赏
  • 举报
回复
用引用好,如果你不想函数内改变传入的参数的话就加个const吧
Eid 2009-10-21
  • 打赏
  • 举报
回复
楼主用的是智能编译器?
函数应许这样重载?
pcboyxhy 2009-10-21
  • 打赏
  • 举报
回复
  1 #include <stdio.h>
2
3 int foo(int &a)
4 {
5 puts("ref");
6 }
7
8 int foo(int a)
9 {
10 puts("val");
11 }
12
13 int main()
14 {
15 int v=1;
16 foo(v);
17 }


编译不过去,存在歧义了,如果用foo(1)调用,会调用foo(int a)而不是引用。

t.cpp: In function ‘int main()’:
t.cpp:16: error: call of overloaded ‘foo(int&)’ is ambiguous
t.cpp:3: note: candidates are: int foo(int&)
t.cpp:8: note: int foo(int)
老邓 2009-10-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 rottenscar 的回复:]
写一个函数
void function(cls a){...}
void function(cls & a){...}
第二个函数是不是永远都不会执行?有没有什么语法去强制执行第二个函数?

PS:这个问题有点变态……

问题在我写一个模板函数用到
template < class arg >
void function( arg a)
这里我不知道是用值还是引用好了,因为如果arg是int的话引用反而会慢。
[/Quote]

当然是引用了!!
int无所谓,但如果是对象呢?
int的引用与非引用,其实几乎没区别。引用和指针可以认为是等效的。
zhaokugua 2009-10-21
  • 打赏
  • 举报
回复
这样编译器没有错误或者警告提示?
老邓 2009-10-21
  • 打赏
  • 举报
回复
我认为编译器会选择第二个,而不是第一个!
从优化的角度来说。

64,639

社区成员

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

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