rvalue-references

c++ notes:recall of move-semantics and rvalue-reference (1)

几年前,整理了一份rvalue相关笔记:以前的一份笔记,梳理近况时,发现某些问题还是没有弄清楚。

Universal Reference

  • Q: 什么场景下需要考虑这个问题? A:模板元编程时,需要考虑兼容各种传入参数类型时(尤其是『左值/右值』)。基本上我感觉就是为了处理完美转发问题。比如写一个工厂函数模板,需要同时兼容传入的参数是左值和右值的情况,核心点是一个右值无法用于初始化一个左值引用,c++11之前要解决这个问题,要么写很多重复偏特化模板,要么付出拷贝参数的代价。

    c++11引入右值引用之后,上述问题可以通过universal reference来解决,即传入参数是左值时,形参的类型推导为左值引用,是右值时,推导为右值引用,同时只需要提供一套模板即可。

  • Q: 什么是Universal Reference? A: 形如T&&, T不含有任何的cv限定符, 且T需要被推导

    G1. If a variable or parameter is declared to have type T&& for some deduced type T, that variable or parameter is a universal reference.