- 此问题在此处已有答案**:
What are the differences between a pointer variable and a reference variable?(44个答案)
四年前关闭了。
截至3天前,社区正在审查是否重新讨论此问题。
- 向函数传递向量时,应使用哪种方法:引用还是指针?**
在大多数情况下,这两种方法中的任何一种都可以完成这项工作。即使在这些情况下,这两种方法的执行方式是否存在任何差异?
我看不出是否有两种办法中只有一种可以奏效的情况。是否有这种情况?
- EDIT**:我将把这个问题称为Q1,Q2 the question cited as containing the answer to this OP和A1/A2分别称为答案集。Q2询问指针与引用的一般差异(不用于传递给函数)。这与Q1非常不同,因为:
- Q2的许多答案可能与Q1无关。
- Q2答案中与Q1相关的任何内容都必须由读者筛选,其中一些甚至可能无法做到这一点。
因此,标记这是一个复制可能是更有害的比帮助读者。
2条答案
按热度按时间pgpifvop1#
这主要是偏好。我遵循以下规则:尽可能使用(const)引用,必要时使用(const)指针。
一个引用隐含地保证不指向
null
。违反这个保证会导致未定义的bahvor,所以一定要检查你是否把指针转换成了引用!在我看来这是唯一的主要优点。我看不出是否有两种方法中只有一种是可行的,是否有这样的情况呢?
如果向量在堆上,而你只持有指向它的指针,那么它可能是一个nullptr。那么你不能传递引用,因为引用可能不是空的。如果你不能这样做,它会调用未定义的行为。
3zwjbxry2#
大多数人都会同意,只要有选择,就应该首选引用而不是原始指针。
这里有理由选择其中一个或另一个吗?
指针和引用之间有一个很大的区别:引用不能为空。
如果你写了一个带指针的函数,你必须在某处加上一个nullptr检查。引用是不需要的,并且一些类型是相同的。
除此之外,指针可能会引入在使用引用时不会发生的错误(主要是由于指针运算),并且通常被认为不如引用安全。
就我个人而言,我对输入参数使用引用,但是每当函数在参数中返回一些东西时,我宁愿使用指针来在调用点上明确意图。
这里很清楚
var
可以通过foo
函数修改,而使用引用时就不那么清楚了:foo(var)
后者要求您检查函数定义,看它是否修改了var。