面试题答案
一键面试- 问题分析:
- 这段代码存在严重问题。函数
func
返回一个对局部变量num
的常量引用。局部变量num
在函数结束时会被销毁,其占用的内存将被释放。而返回的引用仍然指向这块已经无效的内存,这就导致了悬空引用。后续如果通过这个悬空引用去访问数据,会引发未定义行为。
- 这段代码存在严重问题。函数
- 正确设计返回常量引用的函数示例:
- 返回全局变量的常量引用:
int global_num = 10;
const int& func() {
return global_num;
}
- 返回静态局部变量的常量引用:
const int& func() {
static int num = 10;
return num;
}
在这两种情况下,global_num
和static num
的生命周期都长于函数调用,所以返回它们的常量引用是安全的,不会产生悬空引用问题。全局变量在程序启动时分配内存,直到程序结束才释放;静态局部变量在第一次进入函数时初始化,并且在函数调用结束后不会被销毁,其生命周期持续到程序结束。