gpt4 book ai didi

c++ - 为什么这行得通?在 C++ 中返回 const 引用

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:06:24 25 4
gpt4 key购买 nike

我在胡闹 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;
}

结果:

50
50

这是我的想法:

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

为什么会这样?我不相信我做了一个临时拷贝。

最佳答案

在您删除 a 的那一刻,访问 var 就成了您进入未定义行为领域的大门。

它的“工作”是偶然的。 var 所指的空间不再是您的空间,但这次您访问了它。它可能导致段错误、返回 50 以外的数字或重新格式化您的硬盘。

请记住,看似有效是未定义行为表现出来的一种可能方式。

关于c++ - 为什么这行得通?在 C++ 中返回 const 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2217795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com