传递引用和指针的区别是什么?

6

传递引用和使用C指针符号有什么区别?

void some_function(some_type& param)

void some_function(some_type *param)

谢谢


4
我怀疑有人会复制这里已经存在的1000个教程和解释中的任何一个。看看这个链接:http://www.parashift.com/c++-faq-lite/references.html - pmr
2个回答

7

当您在子程序调用中传递变量的指针时,该变量的地址被传递给子程序。为了在子程序中访问变量,必须解除引用指针。

当您传递变量的引用时,编译器会在将变量传递到子程序时获取变量的地址并在子程序中解除引用变量。


这绝对不是语法糖。正如您从其他答案中看到的那样,存在差异。 - SadSido
两者之间有许多微妙的差别,因为引用是一个别名。请参见下文。 - Martin York

6
  • 您无法获取空引用:这一点让您更加安全
  • 您可以将引用视为对象:可以对其进行解引用或其他操作。

基本上,您可以像处理自己的对象一样处理安全指针。


6
通过对空指针进行解引用操作,很容易获得一个空引用。 - Jherico
那是防御性的还是多疑的? - Arkaitz Jimenez
通常这是一个错误:你的引用指向了一个已经被销毁或从未存在的对象。臭名昭著的例子:std::vector<int> myVec; myVec.front();... 当你后悔时,你会发现 std::vector<T>::front 没有抛出 out_of_range 异常! - Matthieu M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接