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

csdn5211 2008-04-21 12:14:22
有了const引用,还要传值干嘛?
...全文
119 点赞 收藏 16
写回复
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--);
}

回复
发动态
发帖子
C++ 语言
创建于2007-09-28

5.9w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
社区公告
暂无公告