gpt4 book ai didi

android - C++ 隐式参数 : this and the returned object, 的顺序哪个先出现?

转载 作者:行者123 更新时间:2023-11-28 02:49:30 26 4
gpt4 key购买 nike

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

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

例子:

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
};

最佳答案

您似乎在询问调用约定(在分支到函数之前,哪个寄存器/堆栈参数和返回值存储在何处)。

很大程度上取决于目标 ABI,即便如此它也相当复杂。对于 ARMv5/6/7,Procedure call standard [pdf]是你的圣经。

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

  • 在 r0 中返回一个不大于 4 个字节的复合类型。
  • 大于 4 字节的复合类型,或者其大小不能由调用者和被调用者静态确定的,存储在内存中调用函数时作为额外参数传递的地址。
    • 如果子程序是一个在内存中返回结果的函数,那么结果的地址放在在 r0 中,NCRN 设置为 r1。
  • 如果参数的单词大小不超过 r4 减去 NCRN,则将参数复制到核心寄存器,从 NCRN 开始

还有

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

因此在大多数情况下,返回的复合值的地址在 $r0 中,而隐式的 this 指针在 $r1 中。

关于android - C++ 隐式参数 : this and the returned object, 的顺序哪个先出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23381779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com