为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
繁星coding 2019-11-11 15:41:58
这些是一样的吗:int foo(bar* p) {  return p->someInt();}和int foo(bar& r) {  return r.someInt();}忽略空指针电位。这两个函数在功能上是否相同,无论someInt()是虚拟的还是传递给bar的子类bar?这个切片什么吗?bar& ref = *ptr_to_bar;
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

有意在标准中未指定使用指针来实现C ++引用。引用更像是变量的“同义词”,而不是指向变量的指针。当有可能意识到指针在某些情况下会显得过大时,这种语义为编译器带来了一些可能的优化。

还有一些区别:

  • 您不能将NULL分配给引用。这是一个至关重要的区别,也是您偏爱另一个的主要原因。

  • 当您获取指针的地址时,您将获取指针变量的地址。当您获取引用的地址时,您将获取所引用变量的地址。

  • 您无法重新分配参考。一旦初始化,它将在整个生命周期中指向同一对象。


查看完整回答
反对 回复 2019-11-11
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

忽略可以用一个而不是另一个来完成的所有语法和可能性,以及在其他答案(针对其他问题)中解释的指针和引用之间的区别……是的,这两个在功能上完全相同!两者都调用该函数,并且均能很好地处理虚函数。


不,您的线不会切开。它只是将引用直接绑定到指针指向的对象。


有关为什么要在另一个上使用的一些问题:


指针和参考之间的区别

通过指针而不是引用传递任何好处?

指针与参考

我不想自己提出分歧,而是委托您参加那些您想知道的事情。


查看完整回答
反对 回复 2019-11-11
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

是的,它们在功能上是相同的。由于引用将要求您在使用它之前将其设置为对象,因此您将不必处理空指针或指向无效内存的指针。

看到语义上的差异也很重要:

  • 当您实际将对象传递给普通对象时,请使用引用-但它太大了,因此将引用传递给对象而不是进行复制(如果您不修改实际对象)更有意义。

  • 当您要处理内存地址而不是对象时,请使用指针。


查看完整回答
反对 回复 2019-11-11
  • 3 回答
  • 0 关注
  • 643 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信