最佳答案
我对此做了一些调查。它看起来像 __gcd
函数是定义的私有(private)辅助函数 in the libstdc++ implementation of the <algorithm>
header (line 1503) .它仅由 std::rotate
在内部使用函数(第 1610 行)。它(可能)从未打算在库实现之外直接使用。因为它特定于 libstdc++,所以不能保证通过 g++ 以外的编译器使用此函数。从这个意义上说,你可以想到 std::__gcd
用作(记录不详的)内部助手,仅适用于某些 C++ 编译器。
(有趣的事实:我第一次注意到 __gcd
的存在是因为这里有一个现已删除的问题,询问它为什么不一致地处理负输入。事实证明它并不是真正设计用于处理负数,因为 libstdc++ 实现仅在输入为非负的情况下使用它。这是使用未记录的内部辅助函数的风险之一!)
另一方面,std::gcd
是在 C++17 中引入的标准 C++ 库函数。这意味着任何 C++17 兼容的编译器都将支持 std::gcd
, 所以如果你有一个兼容 C++17 的编译器,最好使用这个选项。
对于C++14或更低版本,你可以简单地实现你自己版本的GCD功能。欧几里得算法非常易于编写代码并且运行速度极快。
关于c++ - std::__gcd 和 std::gcd 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68772236/