热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c++中的引用范围是什么?

classfu{public:intpub;fu(){pub1;}~fu(){std::cout<<pub<<"

class fu
{
public:
int pub;
fu() { pub = 1; }
~fu() {
std::cout < }
};
fu& fub() {
fu a;
fu& re = a;
return a;
}
int main() {
std::cout <<++fub().pub;
}

输出:1尾\ n 2

我希望引用会出错,因为函数中的变量已终止。但是,析构函数被调用并且主要功能起作用。参考指向什么?



您正在返回对局部变量的引用。当函数返回并且参考悬挂时,变量死亡。返回后,引用指向无效的内容,使用该引用会导致未定义的行为。

fu& fub() {
fu a;
fu& re = a;
return a;
// a is dead now
}

您可以通过编译器警告轻松检测到它,例如-Wall在g ++上。

在Godbolt上直播。

,

引用引用已删除的对象。这是一个悬而未决的参考。结果,该程序具有未定义的行为。

在这种特殊情况下,输出看起来仅是正确的,因为被删除对象占用的内存尚未被覆盖。


推荐阅读
author-avatar
智慧曜彰_272
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有