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

Is there any advantage of using references instead of pointers in c++?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What are the differences between pointer variable and reference variable in C++?

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

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

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

调用这些函数中的任何一个时,使用func比使用func2有什么好处?


  • 不能直接为引用赋值为空,但可以为指针赋值。
  • 不能重新分配引用以指向其他对象,但指针可以。

根据具体情况,这两者都可以是利弊。


您的两个功能都是错误的。因为它们不修改传入的参数,所以应该将它们作为常量,如下所示:

1
2
3
4
5
6
7
8
9
int func(const int &a)
{
    return a+1;
}

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

下面是参考的一个优点,我可以将rvalues传递到参考版本中:

1
2
func(10);
func(func(func(10)));

我不能用指针版本来实现。


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

1
 int func2(int *a = nullptr);

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

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

是的,不能重新分配引用。


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