【发布时间】:2017-11-24 11:01:55
【问题描述】:
为什么不能将右值转换为左值?但是,可以在相反的方向进行转换。从技术上讲,右值确实有一个内存地址,不是吗?
【问题讨论】:
-
思想实验:
int x = 1;-- 1 在这里是一个右值。文字 1 是否有内存地址?可以&1获取地址吗? -
将右值传递给函数。说真的,尽管右值在获得它的访问权限的表达式的末尾将不复存在,给你留下一个悬空指针。
-
@cdhowie 为什么
const int& bon = 2;可能呢? -
@OfT 因为允许临时对象绑定到 const 引用,这延长了临时对象的生命周期。这并没有改变 2 是右值的事实。我的评论旨在让您三思而后行“从技术上讲,右值确实有内存地址,对吗?”答案是并非所有右值都有内存地址.
-
@OfT 没错。诀窍是您不能获取没有名称(右值)的东西的地址。但是通过将该临时对象绑定到一个引用,您已经给它一个名称(请记住,引用只是对象的另一个名称),因此您可以获取它的地址。
标签: c++ c++11 type-conversion rvalue-reference lvalue