HM092 引用返回可作左值
HM092 引用返回可作左值
来源: 第 92 集 C++中的引用-引用做函数返回值
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
函数的返回值类型也可以是引用,写成 int &func()。这里有两点:
- 不要返回局部变量的引用。 局部变量在栈区,函数结束即释放。外面用别名再去访问,第一次可能因为编译器保留而仍是原值,第二次就是乱码。不要真的
return局部变量再二次使用,那是未定义行为。本题对这种错误用法按约定模拟:第一次输出 \(10\),之后输出released。 - 函数调用可以作为左值。 若返回的是仍然活着的变量的引用,就可以写
func() = 1000;,等价于给那个变量赋值。静态变量(加static)不在栈区而在全局区,程序结束才由系统释放,函数返回后它还在,因此可以安全地返回它的引用。无论打印多少次都稳定;把它当左值赋成 \(1000\) 后,原名和别名再读都是 \(1000\)。
必须实现一个返回引用的函数,内部用 static int 保存数据,并在操作里写出 func() = x 这种左值赋值。局部引用的错误用法只按约定模拟,不要真的返回局部地址。
输入格式
第一行一个整数 \(q\)(\(1 \le q \le 100\))。
接下来 \(q\) 行:
1\ k:模拟返回局部引用,读取 \(k\) 次(\(1 \le k \le 10\))。2\ x\ k:执行func() = x,再读取静态引用 \(k\) 次。3\ k:不赋值,只读取静态引用 \(k\) 次。
输出格式
每个操作输出 \(k\) 行,每行一个整数或 released。行末换行。
样例
输入 #1
2
1 2
2 1000 5
输出 #1
10
released
1000
1000
1000
1000
1000
输入 #2
3
3 2
2 7 1
3 2
输出 #2
10
10
7
7
7
说明
样例 1 先演示局部引用:第一次 \(10\),第二次已释放。再把静态引用当左值赋成 \(1000\),连续五次都是 \(1000\)。样例 2 静态变量初始为 \(10\),赋值后一直是 \(7\)。静态变量在全局区,不会因为函数结束而释放。
信息
- ID
- 1091
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者