关于 C++ 参数使用指针还是引用的总结

本文探讨了C++中选择使用指针还是引用作为函数参数的问题。引用提供安全性和效率,但不如指针灵活。指针在异常安全和可选参数方面有优势,而引用通常用于避免值复制。建议在大多数情况下优先使用引用,除非需要重新绑定或传递数组。
摘要由CSDN通过智能技术生成

问题

在 C 语言中,所有的参数传递都是值传递,所以如果你需要在一个函数中改变函数外变量 值,你需要把函数的参数声明为指针(全局变量另当别论)。但是在 C++ 中存在传递引用, 它也可以用来改变变量值。此外引用也同时消除了拷贝对象带来的开销。

既然传递指针和引用都能到达到同样的效果,那么函数声明的时候应该使用引用呢还是 指针呢?

More Effective C++ 一书的总结

这本书的第一条就是区分指针和引用。它们两者之间的最大区别是引用必须指向某个对象而 指针可以是NULL,此外引用一旦指定不能更改而指针可以。

这两个区别点导致引用有更加安全和高效的特性,但是指针却有无可比拟的灵活性。大部分 人出于安全性的考虑会推荐使用引用,这其实也是它设计的主要目的,但是如果你想要灵活 的设计,大部分时候你只能选用指针,比如设计模式种的大部分设计都是使用指针而不是使 用引用。引用在参数传递的时候用得多一些,而类内部的组合中可能会使用指针来提高设计 的灵活性(毕竟一旦设定就无法改变对于灵活性来说是个灾难)。

异常安全

指针还存在的另一个优势是可以使用它实现 pimpl,这种手法可以达到很好的异常安全 性。引用在交换的时候实际上交换的是引用的内容,所以无法做到这一点。详见《More Exceptional C++》一书的第22条。

网上的讨论

这个问题在 stackoverflow 中有非常多的讨论。下面是一些链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值