Code Bye

C/C++里的abs()和fabs()在VC6.0和VS2015中结果不一样

本人在VC6.0中编写了这个程序
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
double a=-0.0000065;
cout<<sizeof(a)<<endl;
cout<<abs(a)<<endl;
cout<<fabs(a)<<endl;
system("pause");
return 0;
}

运行的结果是

本人看了math.h中关于abs()的定义,是这样

也是有double类型的重载,为什么输出的结果是个整型?
而本人在VS2015中编译,

#include<iostream>
using namespace std;
int main()
{
double a = -0.000005;
cout << abs(a) << endl;
cout << fabs(a) << endl;
return 0;
}

结果是这样

这次输出的都是double型,求高手解答为什么在VC6.0中abs()有double类型的参数重载,为什么输出的是整型

解决方案

20

math.h里abs专门给int用的
cmath里的abs有浮点数的重载。另外VC里不用std::abs也有浮点数的重载好像是微软本人搞的…

40

具体可以去看生成汇编,应该是
VC6应该是参数为long的abs:http://en.cppreference.com/w/c/numeric/math/abs
VS的是参数为double的:http://en.cppreference.com/w/cpp/numeric/math/fabs

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C/C++里的abs()和fabs()在VC6.0和VS2015中结果不一样