C++ 隐式参数的顺序: this 和返回的对象,哪个在先?

2024-02-29

在 C++ 中,成员函数最多可以有 2 个隐式参数:this指针和返回对象的地址。它们位于显式参数之前,但是:哪个先走?

我特别对 Android NDK(基于 gcc,ARM)中发生的情况感兴趣。

Example:

class MyClass {
public:
  int a,b;
  MyClass(int aa,int bb):a(aa),b(bb){};
  MyClass modif(int da, int db) {return MyClass(a+da,b+db);} //an object is returned
};

您似乎在询问调用约定(在分支到函数之前注册/在堆栈上存储参数和返回值的位置)。

这取决于a lot即便如此,它也相当复杂。对于 ARMv5/6/7,过程调用标准 [pdf] http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042e/IHI0042E_aapcs.pdf是你的圣经。

如果您真的关心的话,您应该真正阅读整篇文章,但以下是您感兴趣的部分:

  • r0 中返回不大于 4 字节的复合类型。
  • A Composite Type larger than 4 bytes, or whose size cannot be determined statically by both caller and callee, is stored in memory at an address passed as an extra argument when the function was called.
    • 如果子例程是一个在内存中返回结果的函数,则将结果的地址放在 在 r0 中,NCRN 设置为 r1。
  • 如果参数的字大小不大于 r4 减去 NCRN,则将参数复制到 核心寄存器,从 NCRN 开始

Also

  • 对于 C++,隐式this参数作为额外参数传递,紧接在第一个用户参数之前。

所以大多数情况下返回的复合值的地址在$r0和隐含的this指针在$r1.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 隐式参数的顺序: this 和返回的对象,哪个在先? 的相关文章

随机推荐