HM098 重载陷阱
HM098 重载陷阱
来源: 第 98 集 函数高级-函数重载-注意事项
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
函数重载有两处容易踩空。
第一处:引用可以当作重载条件。void func(int &value) 与 void func(const int &value) 的形参类型不同,允许共存。
- 传入一个普通变量时,变量可读可写,会走进没有
const的版本。 - 传入字面量(例如 \(10\))时,没有
const的引用不能绑字面量(引用必须绑合法内存);加上const后编译器会生成临时量,因此只能走进常量引用版。这两种调用不会打架。
第二处:重载再叠默认参数容易二义。例如同时存在
void func2(int a, int b = 10)void func2(int a)
两份函数本身可以写在一起(语法能过)。但只传一个整数时,上一份用默认实参也能接,下一份本身就是一参,编译器不知道走哪一份。传两个整数则只匹配第一份,没有歧义。写重载时不要再给默认参数。
处理 \(q\) 次询问:
V x:把变量 \(x\) 传给func,应走可读可写版,输出RW xL x:把字面量 \(x\) 传给func,应走常量引用版,输出RO xA x:在上述两份func2都存在时只传一个 \(x\),输出AMBIGUOUSP x y:传两个整数给两参版本,输出PAIR x y
输入格式
第一行一个整数 \(q\)(\(1 \le q \le 1000\))。
接下来 \(q\) 行,格式见上。所有整数的绝对值不超过 \(10^9\)。
输出格式
每行一次结果,行末换行。
样例
输入 #1
5
V 10
L 10
A 10
P 10 20
V 7
输出 #1
RW 10
RO 10
AMBIGUOUS
PAIR 10 20
RW 7
输入 #2
2
L -3
P 1 1
输出 #2
RO -3
PAIR 1 1
说明
int &与const int &属于类型不同,可以重载。- 变量走非 const 引用;字面量只能绑常量引用。
- 重载加上默认参数后,单实参调用可能两份都能匹配,必须避免。
- 两实参调用只匹配两参版本,没有二义。
信息
- ID
- 1097
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者