C++ 为什么';t std::abs()用于浮点数
C++ 为什么';t std::abs()用于浮点数,c++,floating-point,c++-standard-library,absolute-value,C++,Floating Point,C++ Standard Library,Absolute Value,std::abs(0.5f)的结果是0,因为浮点数没有过载。为什么?我使用的是G++。在使用std::abs的重载时必须非常小心,因为一些标准库实现会在许多文件中丢弃重载,其中一些文件会隐式包含在其他文件中,如 如果在std::abs(0.5f)之前添加#include或#include(C++17中的第二个),则浮动重载将可用。如果不是这样,那么编译器/标准库实现中就有一个bug(在g++中不太可能) 参考资料:在使用std::abs的重载时必须非常小心,因为一些标准库实现会在许多文件中丢弃重
std::abs(0.5f)
的结果是0
,因为浮点数没有过载。为什么?我使用的是G++。在使用std::abs
的重载时必须非常小心,因为一些标准库实现会在许多文件中丢弃重载,其中一些文件会隐式包含在其他文件中,如
如果在std::abs(0.5f)
之前添加#include
或#include
(C++17中的第二个),则浮动
重载将可用。如果不是这样,那么编译器/标准库实现中就有一个bug(在g++中不太可能)
参考资料:在使用std::abs
的重载时必须非常小心,因为一些标准库实现会在许多文件中丢弃重载,其中一些文件会隐式包含在其他文件中,如
如果在std::abs(0.5f)
之前添加#include
或#include
(C++17中的第二个),则浮动
重载将可用。如果不是这样,那么编译器/标准库实现中就有一个bug(在g++中不太可能)
参考资料:有两种不同的功能-
abs
和std::abs
?它们有不同的重载吗?@Gordem:看。真是一团糟。我甚至在我的店里有一条规则:#包括
,并且只使用std::
.I。e、 ,这种混乱不仅关系到abs()?@Gordem恐怕还有其他不相关的功能。还有两种不同的功能-abs
和std::abs
?它们有不同的重载吗?@Gordem:看。真是一团糟。我甚至在我的店里有一条规则:#包括
,并且只使用std::
.I。e、 ,这种混乱不仅关系到abs()?@Gordem,恐怕还有其他不相关的。A会有用的。我无法重现你遇到的错误行为。@Eljay这是我的错误,我谈到了abs()
,但写了std::abs()
,因为我认为它们是相同的东西。啊,是的,我以前犯过这个错误。这是我创建我的死机文件的原因之一,它是冒牌C++头文件,只定义标准所需的符号,而不包括其他头文件。(它们会编译,但不会链接,而且实际上它们除了用于编译、健全性检查和帮助“包含您使用的内容”之外,没有任何功能。)。我无法重现你遇到的错误行为。@Eljay这是我的错误,我谈到了abs()
,但写了std::abs()
,因为我认为它们是相同的东西。啊,是的,我以前犯过这个错误。这是我创建我的死机文件的原因之一,它是冒牌C++头文件,只定义标准所需的符号,而不包括其他头文件。(它们会编译,但不会链接,而且实际上除了编译、健全性检查和帮助“包含您使用的内容”之外,它们没有任何功能。)