什么是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::labs和std::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转换为正确的types。 另一方面run_func(std::labs); 不是模糊的,也不是太冗长。
不过,不是太有用。