考虑以下函数原型(prototype):
swap(int &a,int &b);
'x' 和 'y' 是 main 函数局部的两个整数。
假设控件在 main() 函数中。
现在,当编译器遇到这种类型的语句时:swap(x,z);
引擎盖下到底发生了什么(我的意思是,就内存位置而言)?
我的问题是:-
- 在 swap() 函数的堆栈中是否为 a,b 分配了任何内存?如果分配了,它将存储什么?
- 引用调用是如何工作的?
最佳答案
Is there any memory allocated for a,b in swap() function's stack?If allocated, what would it store?
首先,考虑在调用 swap_ptr(int *a, int *b)
时对同一问题的回答 假设堆栈用于传递参数,一些内存将分配给 a
和 b
在对 swap_ptr(&x, &y)
的调用中。该内存将保存指向 x
和 y
的指针。
传递引用时也会发生同样的事情:在堆栈上分配一些内存来传递引用 a
和 b
,并使用对 x< 的引用进行初始化
和 y
。此内存通常具有与指针相同的布局,但标准并不要求:用于传递引用的结构是特定于实现且不透明的。
How does call by references work?
与按值调用的工作方式相同,除了编译器知道构造一个引用,而不是复制被传递的对象。
关于c++ - C++ 中的引用调用是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48626602/