static_cast 到数字和指针内容之间的区别

Diffrence between an static_cast to a number and pointer content

我想知道为什么这项工作

int i = 1;
int& ri = i;
int* pi = &i;

// does work
ri = static_cast<int&>(*pi);
// does not work cause I try to assign an reference to an rvalue
ri = static_cast<int&>(1);

那么为什么

ri = static_cast<int&>(*pi); 

然后工作?我正在访问指针内容,它也应该等于 1。非常感谢。

干杯

塞巴斯蒂安

1是常量,没有内存地址,不能作为引用。如果你能做到这一点,这段代码会做什么?

ri = static_cast<int&>(1);
ri++;

pi,指针变量,本身就是一个右值。在它前面添加一个 * 的那一刻,结果就是一个左值。左值引用是完全有效的,这就是 ri = static_cast<int&>(*pi); 起作用的原因。此规则的例外是 const 左值引用,它可以分配右值引用。

查看文章 here 了解左值和右值之间的区别。