对于右值引用的再次学习
右值简单而言就是一种无法被取地址,而且只是在一个小范围内临时被使用的(C++11引入) int&& a = 10;
针对右值,引申出临终值的概念
临终值:1 可以跟左值一样被取地址 2 将要释放或者移走
static_cast<T&&>() 和 std::move() 都是将传入的左值或右值转变成临终值
由此观之,右值引用本身就是一种为临时变量移动(低成本)创建的语法类型,而移动是指将临终值直接转发给目标接收对象,接受者不需要构造就可以正常读取数据(移动是将数据直接移到赋值对象内部)(好比后代接收财产,财产的所有权由上一任移交给下一任,但上一任没有临终之前任然可以使用财产)
std::forward() 是模板中常用的转发函数,就是左值转发还是左值,右值转发还是右值(属于临终值)
C++ 还有一个 引用塌缩:
T&& 等多引用状况,会根据赋值自动变化
左值 T&& -> T&
右值 T&& -> T&&