HM092 引用返回可作左值

HM092 引用返回可作左值

HM092 引用返回可作左值

来源: 第 92 集 C++中的引用-引用做函数返回值

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

函数的返回值类型也可以是引用,写成 int &func()。这里有两点:

  1. 不要返回局部变量的引用。 局部变量在栈区,函数结束即释放。外面用别名再去访问,第一次可能因为编译器保留而仍是原值,第二次就是乱码。不要真的 return 局部变量再二次使用,那是未定义行为。本题对这种错误用法按约定模拟:第一次输出 \(10\),之后输出 released
  2. 函数调用可以作为左值。 若返回的是仍然活着的变量的引用,就可以写 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
通过率
?
上传者