27

可能重复:
C++:何时使用引用与指针
运算符重载是否可以在没有引用的情况下工作?

我忍不住了,但这个基本问题一直在我脑海中浮现:为什么 C++ 有引用,而你也可以使用指针呢?

我知道在某些情况下,它们稍微安全一些,而且通常它们会使代码更漂亮,但从技术上讲没有区别,对吧?那么在任何情况下我无法使用指针并且必须使用引用吗?
我想看看何时使用引用是不可避免的具体例子。

免责声明:
我在 StackOverflow 上没有找到任何答案,这不是关于语法差异的问题。我想知道为什么 C++ 语言首先引入了引用。

4

5 回答 5

10
  • 单独使用指针你不能正确地pass-by-referencereturn-by-reference.
  • 有些方法需要参考。您将如何实现复制构造函数?
  • 有时您需要强制使用别名。你不能用指针来做到这一点——它们可以被改变。引用不能绑定到不同的东西。因此,当您初始化一个引用时,您保证它将在其范围内引用同一个对象。
  • 安全问题
  • ( const) 引用可以绑定到临时对象。要创建一个临时指针,您需要在传递给它的方法中释放它。但你无法判断它是暂时的还是不在里面。
于 2012-05-28T08:44:50.463 回答
8

运算符重载。使用“通过引用传递”的指针会给你不可接受的语法。

于 2012-05-28T08:44:40.073 回答
3

如果你有一个指针作为参数,你必须检查它是否为 NULL。对于参考文献,您必须进行检查。这就是为什么这个人自己在 C++ 中引用的原因 - http://www.stroustrup.com/bs_faq2.html#pointers-and-references

于 2012-05-28T08:54:28.977 回答
1
class A{
public:
    A(int i){}
};

void foo(const A& a){};
void foo2(const A* pa){};
int main (void)
{
  foo(1);
  foo2(1); //invalid
  return (0);
}

我知道的一种情况。用户不需要管理引用对象,编译器可以销毁它。由于指针要求用户明确删除它。对于 foo2,很难管理临时生命周期。

于 2012-05-28T08:48:15.130 回答
0

例子:

my_type *get_some_data();
...
my_type *data = get_some_data();

允许做delete data

my_type &get_some_data();
...
my_type &data = get_some_data();

无法删除。

于 2012-05-28T08:46:39.840 回答