我在浏览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()
之间的区别是什么?答案 0 :(得分:62)
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
强制转换为正确的类型。另一方面,run_func(std::labs);
并不含糊,也不太冗长。
但是,太了。