什么是std :: labs()那里?

浏览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()之间有什么区别?

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

你真的不需要它在C ++代码中,因为我们有一个longstd::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转换为正确的types。 另一方面run_func(std::labs); 不是模糊的,也不是太冗长。

不过,不是有用。