std::__gcd 和 std::gcd 有什么区别?

模板类型定义

Stack Overflow上的许多网站问题都 引用了一个名为. 这个函数和 有什么区别 std::__gcdstd::gcd

模板类型定义

我对此做了一些调查。看起来该__gcd函数是<algorithm>标头(第 1503 行)的 libstdc++ 实现中定义的私有辅助函数它仅由std::rotate函数内部使用(第 1610 行)。它(可能)从未打算直接在库实现之外使用。因为它特定于 libstdc++,所以不能保证通过 g++ 以外的编译器尝试使用此函数。从这个意义上说,您可以将该std::__gcd函数视为(文档不足的)内部帮助程序,它仅适用于某些 C++ 编译器。

(有趣的事实:我首先__gcd被一个现已删除的问题提醒到这里,询问为什么它不一致地处理负输入。结果它并不是真正设计用于处理负数,因为 libstdc++ 实现仅在以下情况下使用它输入是非负的。这是使用未记录的内部帮助函数的风险之一!)

另一方面,std::gcd是在 C++17 中引入的标准 C++ 库函数。这意味着任何符合 C++17 的编译器都将支持std::gcd,因此如果您有符合 C++17 的编译器,最好使用此选项。

对于 C++14 或更低版本,您可以简单地实现自己的版本 GCD 功能。Euclid 的算法编码非常简单,运行速度非常快。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章