MST

星途 面试题库

面试题:C++中常引用生命周期管理之对象生命周期问题

在C++ 中,有如下代码片段: ```cpp const int& ref; { int num = 10; ref = num; } std::cout << ref << std::endl; ```这段代码会出现什么问题?请解释原因,并说明如何修改代码来正确使用常引用。
34.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 问题
    • 代码会出现未定义行为。因为ref是一个常引用,在定义时必须初始化,而代码中const int& ref;没有初始化。另外,ref绑定的num在花括号结束后就超出作用域被销毁了,此时ref成为一个悬空引用,后续访问ref会导致未定义行为。
  2. 修改方法
    #include <iostream>
    int main() {
        int num = 10;
        const int& ref = num;
        std::cout << ref << std::endl;
        return 0;
    }
    
    在这个修改后的代码中,ref在定义时就初始化绑定到num,并且num的作用域足够长,在ref被访问时num仍然有效。