什么是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);
不是模糊的,也不是太冗长。
不过,不是太有用。