c++ - 右值引用转换后的地址更改
问题描述
#include <iostream>
using namespace std;
int main()
{
int i = 0;
cout << &i << endl;
const auto &ref = (short&&)i;
cout << &ref << endl;
return 0;
}
为什么&i
不同于&ref
? (short&)i
不会导致这个问题。是否(short&&)i
生成临时变量?
解决方案
这是因为你正在做不同类型的演员。如果可以将 C 风格的显式转换转换为静态转换,则它始终是静态转换;否则它会重新解释演员表。和/或根据需要进行 const 转换。
(short&&)i
是静态转换,因为它可以解释为static_cast<short&&>(i)
. 它创建一个临时short
对象,ref
绑定到该对象。作为不同的对象,它具有不同的地址。
(short&)i
是一个重新解释的演员,因为它不能被解释为格式不static_cast<short&>(i)
正确。它将 int 引用重新解释为短引用,并ref
绑定到同一个对象。请注意,通过此引用访问对象将具有未定义的行为。
推荐阅读
- google-sheets - 将谷歌电子表格与 mit2 应用程序发明者一起使用
- python - 来自 sqlite 数据库的图像用于使用 python 进行人脸识别
- rust - 无论如何隐式转换为静态生命周期::Error
- android - TextView 以小数点后的数字显示价格,文本大小小于其余部分
- javascript - Javascript:解析与执行
- r - 如何在新数据上使用增强模型
- css - 在不同的文件/WEBPACK 中编译 CSS 和 JS
- swift - 如何在 iCarousel 视图框架中为每个图像添加标签
- ionic-framework - 加载控制器等待 Ionic 的问题
- pointers - 改变变量的指针