加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么没有悬空参考?

发布时间:2020-12-16 09:45:13 所属栏目:百科 来源:网络整理
导读:当bar超出范围时,我希望var失去参考值,但是当我将其打印出来时,它正确地给出了分配给它的初始值.为什么是这样? #include iostreamstruct S{ int const var; S(int const bar = 5) : var(bar) {}};int main(){ S s; std::cout s.var; // 5} 解决方法 是什么
当bar超出范围时,我希望var失去参考值,但是当我将其打印出来时,它正确地给出了分配给它的初始值.为什么是这样?

#include <iostream>

struct S
{
    int const& var;
    S(int const& bar = 5) : var(bar)
    {}
};

int main()
{
    S s;

    std::cout << s.var; // 5
}

解决方法

是什么让你觉得这里没有悬空参考?有.程序的行为是未定义的,因为它会产生悬空引用.其余的只是未定义行为的具体表现.仅仅因为你的引用是悬空并不意味着它会以某种明显“破碎”的方式表现出来.

在您的情况下,引用可能会作为指针在引擎盖下实现.该指针最初是指向一些临时内存位置,该位置最初包含值5.后来内存被“正式”释放,引用变为“正式”悬空.但是指针仍然保留其旧值,并且它指向的内存仍然保留值5.因此,直到某人覆盖该临时内存或者直到有人重新初始化指针,您应该能够看到该指针的“重影”.通过那悬挂的参考.这正是您在实验中看到的内容.当然,你无法在代码中有意义地依赖它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读