c++ - 为什么没有悬挂引用?

标签 c++ reference

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 的值。因此,在有人覆盖该临时内存或有人重新初始化指针之前,您应该能够通过悬空引用看到那个 5 的“幽灵”。这正是您在实验中看到的。当然,您不能在代码中有意义地依赖它。

关于c++ - 为什么没有悬挂引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16803540/

相关文章:

c++ - 为什么我的删除功能总是出现段错误

C++覆盖/重载问题

objective-c - Objective-C 运行时是否会为用户释放保留的关联引用?

Python基础资料引用,相同引用列表

C++ const 指针 - 无法解释的行为

C++:std::sort 使用已销毁的对象和自定义谓词进行排序?

c++ - 如何在 Win x64 中的 32 位和 64 位应用程序之间共享 HWND?

c++ - 在类中为静态无符号字符传递和分配值

c++ - C++中的空引用检查

c++ - 需要帮助创建数组并在另一个函数中编辑它并将其发送回初始函数