从较低级别的角度来看,r值参考是什么样的。我似乎无法绕过它!我可以从r值引用与l值引用中看到生成代码(等效C或x86 / x64)的示例吗?
例如,这个结构会是什么样的?我们现在假设没有复制省。
vector<SomethingHUUGE> myFunc();
void foo(vector<SomethingHUUGE>&&);
int main() { foo(myFunc()); return 0; }
答案 0 :(得分:5)
代码生成的目的没有区别。两者之间唯一的语义差异是你知道RValue引用即将被销毁,而左值引用则不会。
答案 1 :(得分:2)
将两种类型的引用视为高级概念可能会有所帮助。它们都没有明显的低级实现。它们可以都由指针表示,但通常它们只是高级别名,因此根本没有低级别的表示。不会生成额外的代码,引用只会被它引用的对象替换。
如果在代码生成之前无法完全消除引用,则rvalue和lvalue引用通常表示为指针,作为内存地址。
答案 2 :(得分:0)
表达式中的右值没有名称。
大部分时间它都是临时对象。 如果在表达式之后没有任何方法可以使用它,那么它就是一个r值。