47

我在浏览cppreferencestd::abs()时阅读了有关该功能的信息。

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

long abs( long n );

long labs( long n );

long long abs( long long n );

long long llabs( long long n );

所以,

  • 究竟是std::labs()做什么的?
  • 我在何时何地使用std::labs()
  • std::abs()和 和有什么不一样std::labs()
4

1 回答 1

63

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

在 C++ 代码中你并不真的需要它,因为我们有一个since about forever的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);不是模棱两可,也不是太冗长。

仍然,不是有用。

于 2017-09-27T06:45:23.103 回答