r值引用和l值引用有什么区别? (的CodeGen)

时间:2010-06-20 23:24:21

标签: c++ c++11

从较低级别的角度来看,r值参考是什么样的。我似乎无法绕过它!我可以从r值引用与l值引用中看到生成代码(等效C或x86 / x64)的示例吗?

例如,这个结构会是什么样的?我们现在假设没有复制省。

vector<SomethingHUUGE> myFunc();
void foo(vector<SomethingHUUGE>&&);

int main() { foo(myFunc()); return 0; }

3 个答案:

答案 0 :(得分:5)

代码生成的目的没有区别。两者之间唯一的语义差异是你知道RValue引用即将被销毁,而左值引用则不会。

答案 1 :(得分:2)

将两种类型的引用视为高级概念可能会有所帮助。它们都没有明显的低级实现。它们可以都由指针表示,但通常它们只是高级别名,因此根本没有低级别的表示。不会生成额外的代码,引用只会被它引用的对象替换。

如果在代码生成之前无法完全消除引用,则rvalue和lvalue引用通常表示为指针,作为内存地址。

答案 2 :(得分:0)

表达式中的右值没有名称。

大部分时间它都是临时对象。 如果在表达式之后没有任何方法可以使用它,那么它就是一个r值。