首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rvalue到lvalue转换?

Rvalue到lvalue转换?
EN

Stack Overflow用户
提问于 2017-06-21 13:39:57
回答 3查看 15.3K关注 0票数 18

为什么不能将rvalue转换为lvalue?不过,也有可能在相反的方向进行转换。从技术上讲,rvalue确实有一个内存地址,不是吗?

EN

回答 3

Stack Overflow用户

发布于 2018-10-04 11:54:39

您可以:

代码语言:javascript
复制
int&& x = 3;

x现在是一个值。所谓的'rvalue-reference‘可以绑定到一个临时的,但是任何具有名称的东西都是lvalue,所以如果您需要它的rvalue返回,就需要将它forward<>()

请注意,通过将临时引用绑定到rvalue-引用(或const引用),可以延长其生存期。从技术上讲,强制转换是可能的,但不建议这样做,因为临时人员的生命周期很短,所以您通常会得到一个悬空引用。

票数 17
EN

Stack Overflow用户

发布于 2021-04-12 13:29:39

编写模板函数unmove()相当简单,这与std::move()相反。

代码语言:javascript
复制
template<class T> T& unmove(T&& t) { return t; }

请注意,根据自C++11以来的标准:

函数调用中的引用参数存在一个临时绑定,直到包含该函数调用的完整表达式结束为止:如果函数返回一个比完整表达式更长的引用,则它将成为一个悬空引用。

因此,在一个完整表达式中使用unmove()是安全的,但是在对表达式进行了完全评估之后,临时表达式就会消失。

unmove()的常用用法是调用函数/方法,当我不需要这些值时,这些函数/方法通过引用返回值。

票数 7
EN

Stack Overflow用户

发布于 2022-06-15 19:12:06

纠正上面的一个错误。

代码语言:javascript
复制
int&& x = 3;

x是'rvalue-reference‘。请参阅https://www.tutorialspoint.com/What-is-double-address-operator-and-and-in-Cplusplus

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44677825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档