为什么这样做?在C++中返回const引用

dev*_*ter 1 c++ const const-reference

我正在使用C++和const引用,并且很困惑为什么这段代码有效:

#include <iostream>

class A {
public:
    A() : a_(50) {}
    const int& getA() const { return a_; }
private:
    const int a_;
};

int main(int argc, char* argv[])
{
    A* a = new A();
    const int& var = a->getA();
    std::cout << var << std::endl;
    delete a;
    std::cout << var << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

结果:

50
50
Run Code Online (Sandbox Code Playgroud)

这是我的想法:

var存储对a_的引用.
删除a时,也应删除a_.
当再次访问var时,它不再包含有效的引用,并且应该发生分段错误.

为什么这样做?我不相信我是临时副本.

GMa*_*ckG 13

你删除的那一刻a,访问var成为你未定义行为的大门.

这是偶然的"工作".var一个人所指的空间不再是你的空间,但是你这次访问了它.它可能导致分段错误,返回50以外的数字,或重新格式化您的硬盘驱动器.

请记住,似乎工作是未定义行为可以表现出来的一种可能方式.