在C++11中,std::numeric_limits<Type>::max_digits10
的优势是什么?为 Type
返回 0那是对 float 的引用?
例如:
constexpr int precisionPositive(const float &floatVal)
{
using numericType = std::remove_reference<decltype(floatVal)>::type;
constexpr int digits = std::numeric_limits<numericType>::max_digits10;
return digits;
}
constexpr int precisionZero(const float &floatVal)
{
using numericType = decltype(floatVal);
constexpr int digits = std::numeric_limits<numericType>::max_digits10;
return digits;
}
precisionPositive
返回 9 和 precisionZero
返回 0。
在什么情况下零值会有帮助,而不是给出编译时错误?
最佳答案
根据 C++ 标准 (n4659),在 numeric_limits
类模板中,max_digits10
的默认值为 0
。
21.3.4 Class template numeric_limits [numeric.limits]
namespace std { template<class T> class numeric_limits { public: ... static constexpr int max_digits10 = 0;
只有当模板专门用于float
、double
等时,max_digits10
才会被赋予一个特定的值。
考虑float
的特化。
21.3.4.2 numeric_limits specializations [numeric.special]
namespace std { template<> class numeric_limits<float> { public: ... static constexpr int max_digits10 = 9;
实现也遵循这一点。请参阅 GCC 的标准 C++ 库 header limits例如。
因此,除了 max_digits10
被赋予特定值的特殊情况外,默认值为 0
并且因此 max_digits10
的值> 对于浮点类型的引用也是 0
。
关于c++ - max_digits10 在引用浮点类型时为 0 有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55034693/