C++ 右值引用的大小是多少?

C++ 右值引用的大小是多少?,c++,move-semantics,rvalue-reference,C++,Move Semantics,Rvalue Reference,右值引用在堆栈上的大小是多少 例如,在这种情况下: struct A { /* ... */ }; A getA() { A temp; return temp; } A&& a1 = getA() ; 我知道编译器会延长临时对象的生存期以匹配a1的生存期,因此我假设a1必须占用堆栈上对象的大小 如果向获取右值引用参数的函数发送对象,会怎么样? 例如,在这种情况下: void f1(A&& a) { }

右值引用在堆栈上的大小是多少

例如,在这种情况下:

struct A { /* ... */ };
A getA()
    {
        A temp; 
        return temp;  
    }
A&& a1 = getA() ;
我知道编译器会延长临时对象的生存期以匹配a1的生存期,因此我假设a1必须占用堆栈上对象的大小

如果向获取右值引用参数的函数发送对象,会怎么样? 例如,在这种情况下:

void f1(A&& a) {

}

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

你为什么会奇怪?传递右值引用时是否存在问题?或者这仅仅是好奇?为什么不尝试在
f1
函数中使用
sizeof
?如果你使用它,你会得到
A
@Someprogrammerdude的大小。这是我的一些学生提出的一个问题。它实际上是一个实现细节,所以要想弄清楚真正通过的是什么,你必须检查生成的机器代码。除此之外,实现左值引用最常用的方法是使用指针。虽然不确定右值引用,但它很可能也可以使用指针实现,或者编译器可能会传递对象。这甚至可能取决于具体情况。就像我说的,检查生成的机器代码以确定。