HM171 隐式转换分情况
HM171 隐式转换分情况
来源: 第 171 集 模板-普通函数与函数模板区别
难度: 普及-
时间限制: 1s
空间限制: 64MB
题目描述
普通函数和函数模板的核心差别是:**会不会发生隐式类型转换**(也叫自动类型转换)。
请实现两个加法:
int myAdd01(int a, int b);
template<class T>
T myAdd02(T a, T b);
两者都返回 \(a+b\)。调用规则如下:
- 普通函数
myAdd01:调用时可以隐式转换。传入字符时按 ASCII 码转成整数再加。例如 \(10\) 与字符c(ASCII 为 \(99\))得到 \(109\)。 - 函数模板 + 自动类型推导
myAdd02(a, b):不会隐式转换。两个实参必须推出同一个 \(T\),否则这次调用不成立。 - 函数模板 + 显式指定类型
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\);自动推导不能混用int与char。 - 样例 2 中普通函数把
a、b转成 \(97\)、\(98\) 再相加得到 \(195\)。自动推导时两个都是整数,得到 \(42\)。显式指定int时,a转成 \(97\) 再加 \(1\),得到 \(98\)。
信息
- ID
- 1170
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者