Rao*_*Rao 1 c++ overloading ambiguity
我正在阅读Stroustrup的书,关于重载和相关含糊不清的部分.
有一个例子如下:
void f1(char);
void f1(long);
void k(int i)
{
f1(i); //ambiguous: f1(char) or f1(long)
}
Run Code Online (Sandbox Code Playgroud)
正如评论所述,电话是模棱两可的.为什么?
本书的前一部分根据匹配的形式和实际参数说明了5条规则.因此,关于"促销",上述函数调用是否应该遵守规则2?我的猜测是'我'应该提升到很长一段时间,就是这样.
根据评论,似乎int to char转换(降级?)也属于规则2?
来自上面的任何东西都不再是促销活动.任何小于int到int的东西都是促销(少数情况除外 - 见下文)
因此,如果您更改为以下内容,则选择第一个变为非模糊
void f1(int);
void f1(long);
void k(unsigned short i) {
f1(i);
}
Run Code Online (Sandbox Code Playgroud)
请注意,这仅适用于int可以存储所有值的平台unsigned short.在不是这种情况的平台上,这不是促销,而且电话不明确.在这样的平台上,类型unsigned int将是促销目标.
浮点数会发生同样的事情.转换float到double正在促销,但是double到long double是不是推广.在这种情况下,C++不同于C,其中double以long double同样是促进(然而,它不具有反正超载).
| 归档时间: |
|
| 查看次数: |
2933 次 |
| 最近记录: |