指针和引用参数之间的区别?

这些是一样的吗:


int foo(bar* p) {

  return p->someInt();

}


int foo(bar& r) {

  return r.someInt();

}

忽略空指针电位。这两个函数在功能上是否相同,无论someInt()是虚拟的还是传递给bar的子类bar?


这个切片什么吗?


bar& ref = *ptr_to_bar;


繁星coding
浏览 644回答 3
3回答

Cats萌萌

有意在标准中未指定使用指针来实现C ++引用。引用更像是变量的“同义词”,而不是指向变量的指针。当有可能意识到指针在某些情况下会显得过大时,这种语义为编译器带来了一些可能的优化。还有一些区别:您不能将NULL分配给引用。这是一个至关重要的区别,也是您偏爱另一个的主要原因。当您获取指针的地址时,您将获取指针变量的地址。当您获取引用的地址时,您将获取所引用变量的地址。您无法重新分配参考。一旦初始化,它将在整个生命周期中指向同一对象。

摇曳的蔷薇

忽略可以用一个而不是另一个来完成的所有语法和可能性,以及在其他答案(针对其他问题)中解释的指针和引用之间的区别……是的,这两个在功能上完全相同!两者都调用该函数,并且均能很好地处理虚函数。不,您的线不会切开。它只是将引用直接绑定到指针指向的对象。有关为什么要在另一个上使用的一些问题:指针和参考之间的区别通过指针而不是引用传递任何好处?指针与参考我不想自己提出分歧,而是委托您参加那些您想知道的事情。

猛跑小猪

是的,它们在功能上是相同的。由于引用将要求您在使用它之前将其设置为对象,因此您将不必处理空指针或指向无效内存的指针。看到语义上的差异也很重要:当您实际将对象传递给普通对象时,请使用引用-但它太大了,因此将引用传递给对象而不是进行复制(如果您不修改实际对象)更有意义。当您要处理内存地址而不是对象时,请使用指针。
打开App,查看更多内容
随时随地看视频慕课网APP