c++ - C++中的引用调用

标签 c++ reference pass-by-reference

通过引用调用函数实际上传递了什么?

void foo(int &a,int &b)

当我写作时

foo(p,q)

实际传递给函数的是什么。是p和q的地址吗?

最佳答案

实际传递给函数的是引用。命名参数 b 成为参数对象 q 的同义词。

编译器可能如何实现调用者在调用之前将 q 的地址放在堆栈或寄存器中,并且被调用者使用该值来影响对 b< 的所有访问。但将其描述为“实际传递”指针可能会产生误导,因为参数传递是 C++ 语言级别的概念,在该级别它与传递指针不是同一概念。例如,当您传递一个指针时,您可以传递一个空指针,但是当您传递一个引用时,您不能(有效)。所以说它们是同一件事是错误的。

就是说,实现编译器的人可能会将其描述为“实际传递一个指针”,您知道他们的意思。相比之下,如果 char 变量在调用约定中占用 4 字节堆栈槽,则它们可能会说编译器“实际上正在传递一个 int”。所以这取决于“实际上”的含义。

关于c++ - C++中的引用调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2403924/

相关文章:

C++ 指针传递和值修改

c++ - 始终返回的地址为0而不是实际值

c++ - 具有引用类成员的赋值运算符

Java/Android 使用一个 obj 指针来引用 2 个类

c++ - 在其构造函数的成员初始化列表中使用对对象的引用

c++ - 将 UILabel 的内容转换为图像并将其保存到磁盘

windows-phone-7 - 无效的 appId 必应翻译 (WP7)

c++ - 动态扩展滚动条?

c++ - 测试类

c++ - 使用 ffmpeg 以编程方式读取 fMP4