HM171 隐式转换分情况

HM171 隐式转换分情况

HM171 隐式转换分情况

来源: 第 171 集 模板-普通函数与函数模板区别

难度: 普及-

时间限制: 1s

空间限制: 64MB

题目描述

普通函数和函数模板的核心差别是:**会不会发生隐式类型转换**(也叫自动类型转换)。

请实现两个加法:

int myAdd01(int a, int b);

template<class T>
T myAdd02(T a, T b);

两者都返回 \(a+b\)。调用规则如下:

  1. 普通函数 myAdd01:调用时可以隐式转换。传入字符时按 ASCII 码转成整数再加。例如 \(10\) 与字符 c(ASCII 为 \(99\))得到 \(109\)。
  2. 函数模板 + 自动类型推导 myAdd02(a, b):不会隐式转换。两个实参必须推出同一个 \(T\),否则这次调用不成立。
  3. 函数模板 + 显式指定类型 myAdd02<int>(a, b):可以隐式转换。已经明确 \(T\) 是 int 时,字符会被转成整数再加。

小写字母 a 的 ASCII 为 \(97\),因此 c 为 \(99\)。

处理 \(q\) 次询问:

  • 1 x y:用普通函数相加,输出结果。
  • 2 x y:用自动推导的函数模板。类型一致则输出和;否则输出 无法发生隐式类型转换
  • 3 x y:用显式指定 int 的函数模板,输出结果。

\(x,y\) 各为一个记号:若是单个英文字母,视为字符;否则视为整数。

建议实际写代码时优先显式指定类型,避免编译器推出你不想要的 \(T\)。

输入格式

第一行一个整数 \(q\)(\(1 \le q \le 1000\))。

接下来 \(q\) 行,每行一个操作编号和两个记号。整数绝对值不超过 \(10^6\)。字符保证是单个英文字母。

输出格式

每个询问一行:一个整数,或 无法发生隐式类型转换。行末换行。

样例

输入 #1

5
1 10 20
1 10 c
2 10 20
2 10 c
3 10 c

输出 #1

30
109
30
无法发生隐式类型转换
109

输入 #2

3
1 a b
2 40 2
3 a 1

输出 #2

195
42
98

说明

  • 样例 1 中 c 的 ASCII 是 \(99\),普通函数和显式模板都能把 \(10+99\) 算成 \(109\);自动推导不能混用 intchar
  • 样例 2 中普通函数把 ab 转成 \(97\)、\(98\) 再相加得到 \(195\)。自动推导时两个都是整数,得到 \(42\)。显式指定 int 时,a 转成 \(97\) 再加 \(1\),得到 \(98\)。

信息

ID
1170
难度
(无)
分类
(无)
标签
(无)
递交数
0
已通过
0
通过率
?
上传者