使用强制转换

时间:2016-07-19 02:46:12

标签: c++ casting

我理解不涉及演员表时左值和右值之间的差异。但是,当涉及演员阵容时,理解差异变得非常困难。例如:

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;是一个价值? 在我看来,它是一个左值。

1 个答案:

答案 0 :(得分:2)

如果转换为左值引用类型,则会得到左值。如果转换为右值引用类型,则得到xvalue。如果你转换为非引用类型,你得到一个prvalue,在const_cast情况下,它是原始指针的副本,具有不同的cv资格。

简单地说,如果你想要一个左值,你需要转换为左值引用类型。