为什么不能将rvalue转换为lvalue?不过,也有可能在相反的方向进行转换。从技术上讲,rvalue确实有一个内存地址,不是吗?
发布于 2018-10-04 11:54:39
您可以:
int&& x = 3;x现在是一个值。所谓的'rvalue-reference‘可以绑定到一个临时的,但是任何具有名称的东西都是lvalue,所以如果您需要它的rvalue返回,就需要将它forward<>()。
请注意,通过将临时引用绑定到rvalue-引用(或const引用),可以延长其生存期。从技术上讲,强制转换是可能的,但不建议这样做,因为临时人员的生命周期很短,所以您通常会得到一个悬空引用。
发布于 2021-04-12 13:29:39
编写模板函数unmove()相当简单,这与std::move()相反。
template<class T> T& unmove(T&& t) { return t; }请注意,根据自C++11以来的标准:
函数调用中的引用参数存在一个临时绑定,直到包含该函数调用的完整表达式结束为止:如果函数返回一个比完整表达式更长的引用,则它将成为一个悬空引用。
因此,在一个完整表达式中使用unmove()是安全的,但是在对表达式进行了完全评估之后,临时表达式就会消失。
unmove()的常用用法是调用函数/方法,当我不需要这些值时,这些函数/方法通过引用返回值。
发布于 2022-06-15 19:12:06
纠正上面的一个错误。
int&& x = 3;x是'rvalue-reference‘。请参阅https://www.tutorialspoint.com/What-is-double-address-operator-and-and-in-Cplusplus
https://stackoverflow.com/questions/44677825
复制相似问题