Anz*_*rio 4 c++ compiler-construction assembly
在大学的最后几年,我有一个关于编译器的课程.我们为C的子集创建了一个编译器.我一直想知道如何在C++中将pass-by-ref函数调用编译成汇编.
根据我的记忆,pass-by-val函数调用遵循以下过程:
传递参考有什么不同?(int void(int&);)
编辑:
我可能听起来完全失去了,但是,如果你能帮助我,我真的很感激.
每个人的答案基本上都是传递地址而不是值.我明白这基本上是指针传递的东西.那么,为什么这两个函数表现得不同呢?:
struct A {
int x;
A(int v){
x = v;
}
};
int byRef(A& v){
v = A(3);
return 0;
}
int byP (A* v){
v = &A(4); //OR new A(4)
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
A a (1); A b (2);
byRef(a); byP (&b);
cout << a.x << " " << b.x;
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道在byP(A*)中,v是按值传递的,因此,它不会影响调用者的参数.那么,你如何用A*实现byRef(A&)?
您将指针传递给referand,就像您使用任何其他指针一样,并且被调用者知道如何使用它.因此,根据实现,它可能不在堆栈上 - 某些参数在某些调用约定中的寄存器中传递.
可能还有其他方法可以做到这一点,因为C++标准没有指定如何实现引用,即使它们是作为指针实现的,我想它们可能在调用约定中被区分.但是,指针是最明显的实现.
归档时间: |
|
查看次数: |
4194 次 |
最近记录: |