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

Cla*_*bel 3 c++ c++11

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

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

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

int main() { foo(myFunc()); return 0; }
Run Code Online (Sandbox Code Playgroud)

Bil*_*eal 5

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

  • @wowus:不是直接,不是.他们在实践中生成更快代码的原因是它们启用了移动构造函数,这可以节省大量时间.当你知道源被超出范围时,为什么要复制一个向量? (3认同)