有了const引用,还要传值干嘛?

csdn5211 2008-04-21 12:14:22
有了const引用,还要传值干嘛?
...全文
156 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicky_zs 2008-04-21
  • 打赏
  • 举报
回复
传值来自于C,C只能传值调用。而且在C++最开始设计的时候(Bjarne, cfront1.0),也还没有引入“引用”这个概念,“引用”是后来才加入C++的。这也是我们所熟悉的this指针是一个const指针,它也不是引用的原因。
lsmdiao0812 2008-04-21
  • 打赏
  • 举报
回复
可能是为了兼容c语言,不过如果是少量数据(对效率印象不大),传值比const引用直观
testweb 2008-04-21
  • 打赏
  • 举报
回复
const引用只能用在c++,当参数的数据类型为非内部数据时,const引用的效率比传值引用高,我们应该用const引用当传值参数..
但是c语言里又没有const关键值,那么我们只能用传值了,再说c里面的数据都是内部数据,也就不存在效率问题了..不知道有没说
清楚
pengzhixi 2008-04-21
  • 打赏
  • 举报
回复
传值的话至少不用担心会修改原来的值
Leejun527 2008-04-21
  • 打赏
  • 举报
回复
是不是不为了能对c语言的值传递保持兼容呢,还是为了体现多样性。
呵呵,瞎猜的!
Treazy 2008-04-21
  • 打赏
  • 举报
回复
而且这种效率只有在特定的场合才会表现的很明显
Treazy 2008-04-21
  • 打赏
  • 举报
回复
兼容是一方面,但是安全性也是要考虑的问题,引用的话就多了份危险,所以关键是看你是否需要高效

如果效率并不重要,安全最重要,那用传值也可以
csdn5211 2008-04-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liaoyonghan 的回复:]
我觉得传值参数只适用其参数类型是c语言的内部数据类型,因为内部数据类型不会有构造和析构过程,对函数的效率没有影响.当参数类型为内部数据类型时,且作为传入参数,还是可以考虑传值的,毕竟学习c语言我们都是从传值开始学习的嘛
[/Quote]

意思是说,是为了兼容c语言?
testweb 2008-04-21
  • 打赏
  • 举报
回复
我觉得传值参数只适用其参数类型是c语言的内部数据类型,因为内部数据类型不会有构造和析构过程,对函数的效率没有影响.当参数类型为内部数据类型时,且作为传入参数,还是可以考虑传值的,毕竟学习c语言我们都是从传值开始学习的嘛
我是风 2008-04-21
  • 打赏
  • 举报
回复
94
testweb 2008-04-21
  • 打赏
  • 举报
回复
是啊??我也有同感,而且传值的函数效率又没const引用效率高
csdn5211 2008-04-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Treazy 的回复:]
问的问题有点突兀

引用不生成copy变量,如果传个普通值那可是要有copy变量的

相对效率来讲,一个会调用copy构造,一个不会
[/Quote]

那不就是说引用的效率高吗,那为何还要用传值呢,都用const引用多好啊?
Treazy 2008-04-21
  • 打赏
  • 举报
回复
问的问题有点突兀

引用不生成copy变量,如果传个普通值那可是要有copy变量的

相对效率来讲,一个会调用copy构造,一个不会

xbc1987 2008-04-21
  • 打赏
  • 举报
回复
飞机多快啊,那还要火车汽车干嘛
轮船就更不能要啦


Leejun527 2008-04-21
  • 打赏
  • 举报
回复
const 引用的安全性还是没有值传递高的。例如下面的程序:

void fun(const int &a)
{
int &b=const_cast <int&>(a);
b=100;
}

void main ()
{
int n=10;
fun(n);
cout<<n;
}

星羽 2008-04-21
  • 打赏
  • 举报
回复



1)兼容c
2)对于基本类型,传值有传值的好处

比如 int char2int(char c) { return c - '0'; };

你如果传引用不是觉得更浪费和别扭了吗

int char2int(const char& c) { return c - '0'; };

3) 有时候传值会使代码更简洁

void print_rev(int n) {
while (n)
printf("%d ", n--);
}

65,185

社区成员

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

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