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 了解左值和右值之间的区别。
我想知道为什么这项工作
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 了解左值和右值之间的区别。