我认为abs并且fabs在使用时表现不同math.h.但是,当我只使用cmath和std::abs,我必须使用std::fabs或fabs?或者这不是定义?
我在这里检查了abs和fabspython 之间的区别
据我所知,速度和传递的类型有一些不同,但我的问题与VS上的原生c ++有关
关于VS我尝试了以下内容Visual Studio 2013 (v120):
float f1= abs(-9.2); // f = 9.2
float f2= fabs(-9); // Compile error [*]
Run Code Online (Sandbox Code Playgroud)
所以fabs(-9)它会给我一个编译器错误,但是当我尝试执行以下操作时:
double i = -9;
float f2= fabs(i); // This will work fine
Run Code Online (Sandbox Code Playgroud)
我从第一个代码中理解它不会编译因为fabs(-9)需要一个double,并且编译器无法将-9转换为-9.0,但在第二个代码中编译器将在编译时转换i=-9为i=-9.0所以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 …Run Code Online (Sandbox Code Playgroud)