C ++将向量传递给函数:引用与指针,这是首选?

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可以通过foo函数进行修改,而在使用引用时则不那么清楚:

foo(var)

后者要求您检查函数定义,以查看它是否修改var。


这主要是偏好。我遵循以下规则:可以时使用(const)引用,必要时使用(const)指针。

引用隐含地保证不指向null。违反此保证将导致未定义的bahvior,因此请确保检查是否将指针转换为引用!在我看来,这是唯一的主要优势。

I do not see if there are cases where only one of the two would work. Is there any such case?

如果向量在堆上,并且您只持有指向它的指针,那么它可能是nullptr。不能传递引用,因为引用不能为空。如果不这样做,它将调用未定义的行为。