6

可能重复:
C++ 中的指针变量和引用变量有什么区别?

例如,我有两个做同样事情的函数:

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

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

调用这些函数中的任何一个时,使用 func 优于 func2 有什么优势?

4

4 回答 4

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

这两者都可以是优点或缺点,具体取决于情况。

于 2012-04-28T01:58:54.640 回答
3

你的两个函数都是错误的。由于它们不修改传入的参数,因此应该将它们作为 const 接收,如下所示:

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

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

现在这是参考的一个优势,我可以将右值传递给参考版本:

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

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

于 2012-04-28T02:20:41.253 回答
1

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

 int func2(int *a = nullptr);

这在您的简单情况下不起作用,但在许多其他情况下它起作用。

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

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

于 2012-04-28T02:03:13.150 回答
1

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

于 2012-04-28T03:08:50.877 回答