我在这里查看了Python中abs
和fabs
的区别:here
据我所知,它们在速度和传递类型方面存在一些差异,但我的问题与V.S.上的原生C++有关。
关于V.S.,我在Visual Studio 2013 (v120)
上尝试了以下内容:
float f1= abs(-9.2); // f = 9.2
float f2= fabs(-9); // Compile error [*]
因此fabs(-9)
会给我编译器错误,但当我尝试执行以下操作时:
double i = -9;
float f2= fabs(i); // This will work fine
我理解第一段代码的问题在于,fabs(-9)
需要一个double参数,但编译器无法将-9转换为-9.0,因此代码无法编译。而在第二段代码中,编译器会在编译时将i=-9
转换为i=-9.0
,所以fabs(i)
可以正常工作。
还有,为什么编译器不能像C#那样自动接受fabs(-9)
并将int值自动转换为double?
[*]:
Error: more than one instance of overloaded function "fabs" matches the argument list:
function "fabs(double _X)"
function "fabs(float _X)"
function "fabs(long double _X)"
argument types are: (int)