指针和参考参数之间的区别?

这些都是一样的:

int foo(bar* p) {
  return p->someInt();
}

int foo(bar& r) {
  return r.someInt();
}

忽略空指针的潜力。 是这两个函数功能相同不管someInt()是虚拟的,或者如果它们传递一bar或子类bar

这是否切片:

bar& ref = *ptr_to_bar;

故意在标准中没有指定使用指针来实现C ++引用。 引用更像是一个变量的“同义词”,而不是指向它的指针。 这种语义为编译器打开了一些可能的优化,因为在某些情况下可能会意识到指针会过度杀伤。

还有一些不同之处:

  • 您不能将NULL分配给引用。 这是一个至关重要的差异,也是你比其他人更喜欢的主要原因。
  • 当你得到一个指针的地址时,你会得到指针变量的地址。 当你得到一个引用的地址时,你会得到被引用的变量的地址。
  • 你不能重新分配参考。 一旦初始化,它就会在整个生命中指向同一个对象。

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

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

    一些关于你为什么想要使用另一个的问题:

  • 指针和参考之间的区别
  • 通过指针传递参考有什么好处吗?
  • 指针与参考
  • 我不会试图自己想出分歧,我会将你委派给那些以防万一你想知道的人。


    引用是一个常量指针,即不能将引用更改为引用其他对象。 如果更改,则引用对象的值会更改。

    例如:

           int j = 10;
           int &i = j;
           int l = 20;
           i = l; // Now value of j = 20
    
           int *k = &j;
           k = &l;   // Value of j is still 10
    
    链接地址: http://www.djcxy.com/p/20723.html

    上一篇: difference between a pointer and reference parameter?

    下一篇: Is always passing by reference a bad practice?