C++ passing vectors to functions: reference vs. pointer, which is preferred?
将向量传递给函数时,应使用哪种方法:引用或指针?
我看到有(很多/所有?)两人中任何一人都能胜任的情况。即使在这些情况下,这两种方法的执行方式有什么不同吗?
我看不出是否有两种方法中只有一种有效。有这种情况吗?
编辑:引用的问题(关于一般性差异,指针和引用)包含了对这个操作的答案,是非常相关的,但我怀疑这是一个重复。对于传递给函数的指针和引用之间的差异,可以从函数的答案中推断出来,但它们也可能比关于函数的一般差异更具体。所以不是所有的答案都是相关的。此外,有些答案可能只是部分相关。
大多数人都同意,只要你有选择,引用就比原始指针更受欢迎。
Are there reasons for preferring one or the other here?
指针和引用之间有一个很大的区别:引用不能为空。
如果编写接受指针的函数,则必须在某处添加nullptr检查。使用不需要的引用和一些相同的类型。
除此之外,指针还可能引入在使用引用时无法发生的错误(主要是由于指针算术),通常认为指针不如引用安全。
就个人而言,我使用输入参数的引用,但每当函数返回参数中的某个内容时,我宁愿使用指针来明确调用站点上的意图。
1 2 3 4 5 6 7 8 9 10 | void foo(int* var) { /* there may be a lot of code here */ *var = 0; } // somewhere else foo(&var); |
这里很明显,
后者要求您检查函数定义,以查看它是否修改var。
这主要是偏好。我遵循以下规则:可以时使用(const)引用,必要时使用(const)指针。
引用隐含地保证不指向
I do not see if there are cases where only one of the two would work. Is there any such case?
如果向量在堆上,并且您只持有指向它的指针,那么它可能是nullptr。不能传递引用,因为引用不能为空。如果不这样做,它将调用未定义的行为。