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

Jon*_*Mee 6 c++ floating-point integer fixed-point numeric-limits

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

  • is_integer :" true对于所有整数算术类型T"

  • is_exact:" true对于T使用精确表示的所有算术类型"

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

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

Edg*_*jān 13

cppreference页面:is_exact

笔记

虽然所有基本类型T std::numeric_limits<T>::is_exact==true都是整数类型,但库可以定义非整数的精确类型,例如表示分数的有理算术类型.


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

21.3.4.1 numeric_limits成员[numeric.limits.members]

static constexpr bool is_exact;

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

  • 标准引用:*"所有整数类型都是精确的,但并非所有确切类型都是整数.例如,有理和固定指数表示是精确但不是整数."* (4认同)