我理解不涉及演员表时左值和右值之间的差异。但是,当涉及演员阵容时,理解差异变得非常困难。例如:
static_cast<int&>(x) -- this is lvalue expression.
但为什么以下是prvalue表达式:
int i=9;
int *k=&i;
int *m=&i;
int *const ptr=k;
const_cast<int*>(ptr)=m;
尽管它有效但却不正确。应该是:
const_cast<int*&>(ptr)=m; --note the & here
因为
const_cast<int*>(ptr)
是prvalue
和
const_cast<int*&>(ptr)=m;
是左值。
任何人都可以解释为什么const_cast<int*>(ptr)=m;
是一个价值?
在我看来,它是一个左值。
答案 0 :(得分:2)
如果转换为左值引用类型,则会得到左值。如果转换为右值引用类型,则得到xvalue。如果你转换为非引用类型,你得到一个prvalue,在const_cast
情况下,它是原始指针的副本,具有不同的cv资格。
简单地说,如果你想要一个左值,你需要转换为左值引用类型。