std::numeric_limits::d igits 可以是负数吗?
Can std::numeric_limits::digits be negative?
http://en.cppreference.com/w/cpp/types/numeric_limits/digits
这个值可以为负吗?
我想你可以为自己的类型之一添加自己的专业化,并输入一个负digits
成员。对于基元类型?不。标准中的相关位置(截至2011年)是18.3.2.4(8-10):
static constexpr int digits;
8 无需更改即可表示的
radix
位数。9 对于整数类型,表示中无符号位的数量
10 对于浮点类型,指尾数中的
radix
位数。
这些都不可能是负面的。
如果你的实际问题是:"为什么,当digits
不能是负面的时,它是一个签名int
?"那么你的猜测和我的一样好。我的猜测是,这是因为有符号类型的算术并不那么令人惊讶。例如,std::numeric_limits<int>::digits - std::numeric_limits<long>::digits
以这种方式不大于零。
您可以为自己的类型提供专用std::numeric_limits
(§[namespace.std]/1):
除非另有说明,否则如果C++程序将声明或定义添加到命名空间 std 或命名空间 std 中的命名空间,则未定义它的行为。仅当声明依赖于用户定义的类型并且专用化满足原始模板的标准库要求且未明确禁止时,程序才能将任何标准库模板的模板专用化添加到命名空间 std。
似乎没有任何语言禁止负数,例如§[limits.numeric]中的位数,如果它存在,这就是你所期望的地方。另一方面,负数也没有任何意义,并且很明显与字段的描述背道而驰,即使没有直接规定该数字是非负数。
不过,std::numeric_limits<T>::digits
产生值 0 是完全可能和合理的。事实上,对于大多数非算术类型(§[numeric.limits]/1),它基本上是必需的:
The default numeric_limits<T> template shall have all members, but with 0 or false
values.
一些最初看起来像算术类型的东西实际上并非如此。举一个明显的例子,std::complex<T>
不是算术类型。
底线:我希望所有内置类型的位数都是严格的正数。尽管没有什么可以直接禁止用户定义类型的负值,但似乎这样的值必须是一个错误 - 如果该值是算术值,则位数应严格为正数,如果不是算术值,则不应为该类型提供std::numeric_limits
专用化(在这种情况下,将使用值为 0 的默认值)。
- 为什么在main()之前断言会导致语法错误"error: expected ')' before numeric constant"?
- boost::icl::interval 和 boost::numeric::interval 是否有可用的适配层?
- 检测<T>某些非数字类型 T 的 std::numeric::type 的特化
- 是否有内置函数可用于boost :: numeric ::间隔
- 使用 boost::numeric::odeint 积分非线性函数 f'(x, y, z) = a + b*I
- 模板实例化与Armadillo和Boost :: Numeric :: Odeint
- typedef 一个向量和 boost::numeric::ublas::vector 的固定大小
- 为什么Boost Numeric库通过使用调试或发布模式给出不同的结果
- 从另一个子向量或subsatrix创建boost :: numeric :: ublas vector
- 包含 boost::numeric::ublas::matrix 的类的运算符重载
- 与CUDA/OpenMP兼容的`boost::numeric::odeint::runge_kutta-X`模板参数
- 将"using namespace boost::numeric::ublas;"与 stl 矢量一起使用时出错
- std::numeric_limits<T>::d igits 应该代表什么?
- std::numeric_limits::d igits 可以是负数吗?
- BH R封装可以链接以提高"math"和"numeric"吗?
- 你如何让迭代器到一行 boost::numeric::ublas::matrix<T>?
- 在C++中创建一个泛型Numeric类
- 为什么箭头运算符"->"不适用于 boost::numeric::ublas::vector<...>::iterator?
- 编译错误-boost::numeric::ublas::coordinate_matrix
- 如何将boost::numeric::ublas::vector复制到矩阵