std::labs() 到底有什么用?

What exactly is std::labs() there for?

我在浏览 cppreference 时了解到 std::abs() 功能。

在那个页面上我还看到了一个 std::labs() 函数。它与 std::abs() 重载之一(long 的重载)具有相同的原型。

long abs( long n );

long labs( long n );

long long abs( long long n );

long long llabs( long long n );

所以,

C++11 是在添加了 std::labsstd::llabs 的时候。这是 C++ 标准库与 C99 标准库部分同步的一部分。

你在 C++ 代码中并不真正需要它,因为我们有一个 long 重载 std::abs 几乎永远。但是如果你有一些 C 代码(巧合的是它也可以用 C++ 编译器编译),并且它使用 labs,你可以用 C++11 编译器和标准库构建它。


回想起来,这些功能有一个边缘有用的用例。那就是当使用 std::abs 的尝试不明确时。例如:

template<typename T>
T run_func(T (&f)(T)) {
  return f({});
}

然后尝试调用 run_func(std::abs); 是错误的。我们需要显式指定模板参数或将 std::abs 转换为正确的类型。另一方面 run_func(std::labs); 并不含糊,也不太冗长。

不过,不太有用。