我什么时候使用fabs什么时候使用std :: abs就足够了?

mat*_*ath 96 c++ math.h cmath

我认为abs并且fabs在使用时表现不同math.h.但是,当我只使用cmathstd::abs,我必须使用std::fabsfabs?或者这不是定义?

Mik*_*our 121

在C++中,使用它总是足够的std::abs; 所有数值类型都超载了.

在C中,abs只适用于整数,并且您需要fabs浮点值.这些在C++中可用(以及所有C库),但不需要使用它们.

  • 如果您忘记了`std ::`并且只使用`abs`,那么您的代码将在Windows上按预期工作,但在linux上将使用`int`版本,这可能非常难以调试. (3认同)
  • @brubelsabs:是的.在C++中不需要单独的fabs函数,因为C++具有函数重载(abs可以为多种类型定义,它在C++中).它也受到标准的保证.当然,如果你四处寻找一些超过10年的过时编译器,你可能会发现一个不支持它的人. (2认同)

Ala*_*ing 22

这仍是好的使用fabsdoublefloat参数.我更喜欢这个,因为它确保如果我不小心剥离std::abs,那么浮点输入的行为保持不变.

我只花了10分钟调试这个问题,由于我自己的错误abs而不是使用std::abs.我认为它using namespace std;会推断,std::abs但它没有,而是使用C版本.

无论如何,我认为使用fabs而不是abs浮点输入作为一种清楚地记录你的意图的方式是好的.

  • 那真是怪了.你的电话应该是模棱两可的(因此是错误的)对吗? (2认同)

小智 10

还有一个原因可以std::fabs明确推荐浮点输入.

如果您忘记包含<cmath>,std::abs(my_float_num)则可以std::abs(int)代替std::abs(float).很难注意到.