【问题标题】:What actually happens when passing by reference通过引用传递时实际发生的情况
【发布时间】:2014-09-15 09:52:43
【问题描述】:

当我像这样通过引用传递变量时:

void function(int &r){
    //do something
}

int main(){
    int a = 100;

    function(a);

    return 0;
}

实际发生了什么? r 是否包含整数变量的地址或其他内容?它是怎么找到的?

【问题讨论】:

  • 究竟发生了什么?它无法编译,因为您的代码中有几个错误。如果您懒得为这个简单的示例发布正确的代码,为什么有人要花时间帮助您?
  • 通常,实现只会在幕后传递一个指针,但据我所知,它没有义务这样做。编译器也可能内联函数并且不会传递任何指针或任何东西。实现定义等。
  • @ta.speot.is unspecified,而不是implementation-defined

标签: c++ syntax reference


【解决方案1】:

您的整数 a 的引用将作为参数传递给您的函数。现在在你的函数中,如果你改变r指向的值,它也会反映在a中。

因此,如果您在函数中分配r=2 并在main 中打印出a,您将看到a 的值为2。

你的程序有一些语法错误,但我能理解你想表达的意思。

编辑:

从用户的角度来看,就好像您在函数中接收到一个值,只是对它所做的修改对调用者是可见的。在传递大对象时,它在性能方面也更便宜,因为不需要副本。

它在实践中的工作方式是编译器实际上将指针传递给函数。但是由于调用者必须有一个有效的对象才能传递给函数,所以引用不能与指针相反是无效的,因此您无需检查 NULL 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2012-10-08
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多