C++ 使用参数初始化引用

标签 c++

我有以下代码,我想知道为什么它写出“22”而不是垃圾

class example
{

public:

    example(int ea) : ref(ea)
    {
    }

    int& ref;
};

int main ()
{
    example obj(22);

    cout << obj.ref; // Writes out 22

    return 0;
}

我认为这应该发生:

  • obj(22) 将 22 隐式转换为临时整数
  • 整数复制到int ea参数
  • ref 使用对 ea 参数的引用进行初始化
  • ea参数被销毁

为什么引用仍然有效?

最佳答案

简短回答:它无效,它恰好有效。

长答案:您的事件顺序是正确的。引用指向一个超出范围的变量(在构造函数的末尾)。因此,它是一个悬空引用。从那时起对该引用的任何使用都表现出未定义的行为。在本例中,它恰好打印出值,但它也可以轻松地执行任何其他操作。

关于C++ 使用参数初始化引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15770459/

相关文章:

c# - 在 C# 应用程序中运行 C++ exe 问题

c++ - 字符串保留期间的 glibc malloc 死锁

c++ - CEF 框架在关闭前发送 http 请求

c++ - 如何将设备内存中分配的结构化数据从设备复制到主机

c++ - 逐步将 gcov 与 CMake 结合使用

c++ - 如何处理可选参数+可选返回值

c++ - 定义的随机问题

c++ - 是否定义为 C++ 标准算法提供空范围?

C++在没有sqrt函数循环故障的情况下找到平方根

c++ - GCC、std::ctype 特化和流