std :: labs()究竟是什么?

时间:2017-09-27 06:42:01

标签: c++ c c++11 prototype math-functions

我在浏览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 );

所以,

  • 究竟std::labs()到底是什么?
  • 我何时何地使用std::labs()
  • std::abs()std::labs()之间的区别是什么?

1 个答案:

答案 0 :(得分:62)

C ++ 11是在添加std::labsstd::llabs时。这是使用C99标准库对C ++标准库进行部分同步的一部分。

你真的不需要它在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);并不含糊,也不太冗长。

但是,了。