gpt4 book ai didi

c++ - RValue 引用的大小是多少?

转载 作者:行者123 更新时间:2023-12-02 19:10:30 25 4
gpt4 key购买 nike

RValue 引用的堆栈大小是多少?

例如在这样的情况下:

struct A { /* ... */ };
A getA()
{
A temp;
return temp;
}
A&& a1 = getA() ;

我知道编译器会延长临时变量的生命周期以匹配 a1 的生命周期,因此我假设 a1 必须占用堆栈上 A 对象的大小。

如果将对象发送到获取 RValue 引用参数的函数会怎样?例如本例中:

void f1(A&& a) {

}

在堆栈上传递的内容的大小是多少?只是一个指针,还是 A 的大小?

最佳答案

这取决于。

一般来说,在 C++ 中,引用充当其他对象的别名,因此根本不占用任何空间。编译器会尽力完全消除它们。这通常很容易做到,因为引用不能“重新分配”以引用其他内容。

但有时引用需要存储较长时间(例如作为类成员)或在运行时传递(例如作为函数参数)。在这些情况下,引用通常被实现为指针。所以例如在 64 位机器上,它们将占用堆栈上的 1 个寄存器或 8 个字节(请记住,前 N 个函数参数通常通过寄存器传递,有关详细信息,请参阅平台 ABI)。

在这方面,右值引用和左值引用之间没有区别。

关于c++ - RValue 引用的大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64365856/

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