【发布时间】:2015-11-16 15:07:48
【问题描述】:
我在 python here 上检查了 abs 和 fabs 之间的区别
据我了解,速度和传递的类型存在一些差异,但我的问题与 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) 需要一个双精度,并且编译器无法将 -9 转换为 -9.0,但在第二个代码中,编译器会将 i=-9 转换为 @987654331 @ 在编译时,所以 fabs(i) 可以正常工作。
还有更好的解释吗?
另一件事,为什么编译器不能接受fabs(-9) 并像我们在c# 中那样自动将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)
【问题讨论】:
标签: c++ visual-studio-2013 cmath