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

C++语言 码拜 8年前 (2016-06-09) 1992次浏览
本人在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;
}

运行的结果是
C/C++里的abs()和fabs()在VC6.0和VS2015中结果不一样
本人看了math.h中关于abs()的定义,是这样
C/C++里的abs()和fabs()在VC6.0和VS2015中结果不一样
也是有double类型的重载,为什么输出的结果是个整型?
而本人在VS2015中编译,

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

结果是这样
C/C++里的abs()和fabs()在VC6.0和VS2015中结果不一样
这次输出的都是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中结果不一样
喜欢 (0)
[1034331897@qq.com]
分享 (0)