在c ++中使用引用而不是指针有什么好处吗?

时间:2012-04-28 01:56:48

标签: c++ pointers reference

  

可能重复:
  What are the differences between pointer variable and reference variable in C++?

例如,我有两个执行相同操作的函数:

int func(int &a)
{
   return a+1;
}

int func2(int *a)
{
   return *a+1;
}

在调用其中任何一个函数时,使用func over func2有什么好处?

4 个答案:

答案 0 :(得分:10)

  • 不能直接为引用赋值null,而是指针。
  • 无法重新分配引用以指向其他内容,但指针可以是。

根据具体情况,这些都可能是优点或缺点。

答案 1 :(得分:2)

指针更灵活,也可以在声明中预定义,如:

 int func2(int *a = nullptr);

这在你的简单案例中不起作用,但在许多其他情况下却不起作用。

指针也可以更容易地用于其他事情,比如存储在列表中,打字和其他东西。

是的,无法重新分配引用。

答案 2 :(得分:2)

你的两个功能都错了。由于它们不修改传入的参数,因此它们应该将它们作为const引用,如下所示:

int func(const int &a)
{
    return a+1;
}

int func2(const int *a)
{
    return *a+1;
}

现在这里有一个参考优势,我可以将rvalues传递给参考版本:

func(10);
func(func(func(10)));

我不能用指针版本做到这一点。

答案 3 :(得分:0)

如果a是一个重载标准C ++运算符的对象(例如operator []或operator *),客户端可以使用更加标准的C ++语法,如[i],而不是a->运算符[](i)或(* a)[i]