这些是一样的吗: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分配给引用。这是一个至关重要的区别,也是您偏爱另一个的主要原因。
当您获取指针的地址时,您将获取指针变量的地址。当您获取引用的地址时,您将获取所引用变量的地址。
您无法重新分配参考。一旦初始化,它将在整个生命周期中指向同一对象。
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
忽略可以用一个而不是另一个来完成的所有语法和可能性,以及在其他答案(针对其他问题)中解释的指针和引用之间的区别……是的,这两个在功能上完全相同!两者都调用该函数,并且均能很好地处理虚函数。
不,您的线不会切开。它只是将引用直接绑定到指针指向的对象。
有关为什么要在另一个上使用的一些问题:
指针和参考之间的区别
通过指针而不是引用传递任何好处?
指针与参考
我不想自己提出分歧,而是委托您参加那些您想知道的事情。
猛跑小猪
TA贡献1858条经验 获得超8个赞
是的,它们在功能上是相同的。由于引用将要求您在使用它之前将其设置为对象,因此您将不必处理空指针或指向无效内存的指针。
看到语义上的差异也很重要:
当您实际将对象传递给普通对象时,请使用引用-但它太大了,因此将引用传递给对象而不是进行复制(如果您不修改实际对象)更有意义。
当您要处理内存地址而不是对象时,请使用指针。
- 3 回答
- 0 关注
- 643 浏览
添加回答
举报
0/150
提交
取消