通过引用调用函数实际上传递了什么?
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/