gpt4 book ai didi

c++ - 右值引用转换后的地址变化

转载 作者:太空狗 更新时间:2023-10-29 23:38:49 24 4
gpt4 key购买 nike

#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被绑定(bind)。作为不同的对象,它具有不同的地址。

(short&)i是一个重新解释的转换,因为它不能被解释为 static_cast<short&>(i)这是错误的。它将 int 引用重新解释为短引用,并且 ref绑定(bind)到同一个对象。请注意,通过此引用访问对象会产生未定义的行为。

关于c++ - 右值引用转换后的地址变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52777003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com