为什么标准同时提供了is_integer和is_exact?

时间:2018-01-12 13:29:54

标签: c++ floating-point integer fixed-point numeric-limits

std::numeric_limits提供了2个互斥的常量:

  • is_integer true适用于所有整数算术类型T

  • is_exacttrue用于所有使用精确表示的算术类型T

是否存在非精确积分类型的可能性?在这里试图允许什么?

在我的所有模板中,我要知道我是否处理精确数字,我使用了is_integer,我是否还需要为is_exact添加支票?

1 个答案:

答案 0 :(得分:13)

来自is_exact cppreference 页面:

  

备注

     

虽然所有基本类型T都适用于此   std::numeric_limits<T>::is_exact==true是整数类型,是一个库   可以定义非整数的确切类型,例如理性的   算术类型代表分数。

而且,正如@Holt所提到的,该标准也描述了它:

  

21.3.4.1 numeric_limits members [numeric.limits.members]

     

static constexpr bool is_exact;

     

如果类型使用精确表示,则为true。 所有整数类型都是精确的,但并非所有精确类型都是整数。例如,有理和固定指数表示是精确但不是整数。