我假设在使用math.h
时abs
和fabs
的行为是不同的。但是当我只使用cmath
和std::abs
时,我必须使用std::fabs
或fabs
吗?或者这还没有定义?
发布于 2010-06-25 21:06:31
在C++中,使用std::abs
总是足够的;它对所有数值类型都是重载的。
在C中,abs
只适用于整数,而浮点值需要使用fabs
。这些在C++中都是可用的(以及所有的C库),但是不需要使用它们。
发布于 2012-12-10 06:44:47
对于double
和float
参数,仍然可以使用fabs
。我更喜欢这样,因为它可以确保,如果我意外地将std::
从abs
上剥离,浮点输入的行为将保持不变。
我刚刚花了10分钟来调试这个问题,因为我自己的错误是使用abs
而不是std::abs
。我假设using namespace std;
会推断出std::abs
,但它没有,而是使用了C版本。
无论如何,我相信使用fabs
而不是abs
作为浮点输入是一种很好的方式,可以清楚地记录您的意图。
发布于 2016-07-14 15:19:26
显式推荐将std::fabs
用于浮点输入还有另一个原因。
如果您忘记包含,那么您的std::abs(my_float_num)
可以是std::abs(int)
而不是std::abs(float)
。这很难被注意到。
https://stackoverflow.com/questions/3118165
复制相似问题