为什么 std::abs() 不适用于浮点数

Gor*_*dem 1 c++ floating-point absolute-value c++-standard-library

结果std::abs(0.5f)0因为浮点数没有过载。为什么?我正在使用 G++。

Bat*_*eba 6

使用 的重载时必须非常小心,std::abs因为某些标准库实现会在许多文件中乱放重载,其中一些文件被隐式包含在其他文件中,例如<iostream>.

如果您#include <cmath>#include <cstdlib>(C++17 中的第二个)之前,std::abs(0.5f)float重载将可用。如果不是这种情况,则说明您的编译器/标准库实现中存在错误(在 g++ 的情况下不太可能)。

参考:https : //en.cppreference.com/w/cpp/numeric/math/fabs

  • @Gordem:请参阅/sf/ask/1497483921/。这绝对是一团糟。我什至在我的商店里有这样的规则:“#include &lt;cmath&gt;”并且只使用“std::&lt;something or other&gt;”。 (2认同)