gpt4 book ai didi

c++ - 获取在寄存器中传递的参数的地址

转载 作者:行者123 更新时间:2023-11-27 23:07:59 26 4
gpt4 key购买 nike

在具有按值传递的 C++ 中,调用者构造被调用者使用的拷贝。在 x64 ABI 中,一些参数在寄存器中传递。寄存器没有地址。

假设我有以下类(class):

class Self_Pointer
{
Self_Pointer* self;
Self_Pointer(const Self_Pointer& obj) : self(this) {}
}

当作为参数传递时,它需要一个指向自身的指针。现在我有了这个功能:

f(Self_Pointer x) {}

f() 按值获取 Self_Pointer,按调用约定在寄存器中传递。 f() 的调用者必须在寄存器中创建一个拷贝。因此,调用者将在位于寄存器中的 Self_Pointer 上运行构造函数。但是,寄存器没有地址,因此不可能运行构造函数。这个难题是如何解决的?

[编辑:根据 Steve Jessop 的回答,将类(class)的构造函数固定为复制构造函数。]

最佳答案

使用寄存器(或堆栈,就此而言)进行参数传递是特定编译器的实现细节。为了得到一个地址传递给一个函数,编译器将寄存器的值复制到内存中的一个临时位置(通常在堆栈上),将它的地址传递到它需要去的任何地方,然后从如果需要,将临时位置放回到同一个寄存器中。

关于c++ - 获取在寄存器中传递的参数的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22057228/

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