可能重复:
C++ 中的指针变量和引用变量有什么区别?
例如,我有两个做同样事情的函数:
int func(int &a)
{
return a+1;
}
和
int func2(int *a)
{
return *a+1;
}
调用这些函数中的任何一个时,使用 func 优于 func2 有什么优势?
可能重复:
C++ 中的指针变量和引用变量有什么区别?
例如,我有两个做同样事情的函数:
int func(int &a)
{
return a+1;
}
和
int func2(int *a)
{
return *a+1;
}
调用这些函数中的任何一个时,使用 func 优于 func2 有什么优势?
这两者都可以是优点或缺点,具体取决于情况。
你的两个函数都是错误的。由于它们不修改传入的参数,因此应该将它们作为 const 接收,如下所示:
int func(const int &a)
{
return a+1;
}
int func2(const int *a)
{
return *a+1;
}
现在这是参考的一个优势,我可以将右值传递给参考版本:
func(10);
func(func(func(10)));
我不能用指针版本做到这一点。
指针更灵活,它也可以在声明中预定义,如:
int func2(int *a = nullptr);
这在您的简单情况下不起作用,但在许多其他情况下它起作用。
指针也可以更容易地用于其他事情,比如存储在列表中、打字和其他事情。
是的,不能重新分配引用。
如果 a 是重载标准 C++ 运算符(例如 operator[] 或 operator*)的对象,客户端可以在更标准的 C++ 语法中使用它,例如 a[i],而不是 a->operator[](i) 或 (*a )[一世]