std::labs() 到底有什么用?
What exactly is std::labs() there for?
我在浏览 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
的时候。这是 C++ 标准库与 C99 标准库部分同步的一部分。
你在 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);
并不含糊,也不太冗长。
不过,不太有用。
我在浏览 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
的时候。这是 C++ 标准库与 C99 标准库部分同步的一部分。
你在 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);
并不含糊,也不太冗长。
不过,不太有用。