我有这个代码,唯一被调用的方法是'double',为什么?
#include<iostream>
using namespace std;
int abs(int i){ cout << i << endl; return 0; };
long abs(long l){ cout << l << endl; return 0; };
double abs(double d){ cout << d << endl; return 0; };
int main(){
abs(-13.63);
abs(1);
abs(1000000000); //chama long abs(long l)
}
答案 0 :(得分:0)
我无法在codepad上编译您的代码,我认为您的方法与核心abs
函数发生了冲突,但是这个
调整后的版本有效:
#include<iostream>
using namespace std;
int xabs(int i){ cout << "i:" << i << endl; return 0; }
long xabs(long l){ cout << "l:" << l << endl; return 0; }
double xabs(double d){ cout << "d:" << d << endl; return 0; }
int main(){
xabs(-13.63);
xabs(1);
xabs(1000000000); //chama long abs(long l)
return 0;
}
输出:
d:-13.63
i:1
i:1000000000
答案 1 :(得分:0)
对您的代码进行一些小修改将有助于解决此问题。
#include<iostream>
using namespace std;
int abs(int i) { cout << "*1* " << i << endl; return 0; };
long abs(long l) { cout << "*2* " << l << endl; return 0; };
double abs(double d){ cout << "*3* " << d << endl; return 0; };
int main(){
abs(-13.63);
abs(1);
abs(1000000000); //chama long abs(long l)
abs(1000000000L);
}
当我执行此操作时,我发现确实调用了不同的版本,并且1000000000
数字不会存储为long
,而是存储为int
。 (至少在我的机器上这里。)我添加了第四个强制存储的调用作为long
,它似乎有效。这是我得到的输出:
*3* -13.63
*1* 1
*1* 1000000000
*2* 1000000000
这有帮助吗?