std::numeric_limits
提供了2个互斥的常量:
is_integer
:“true
适用于所有整数算术类型T
”
is_exact
:“true
用于所有使用精确表示的算术类型T
”
是否存在非精确积分类型的可能性?在这里试图允许什么?
在我的所有模板中,我要知道我是否处理精确数字,我使用了is_integer
,我是否还需要为is_exact
添加支票?
答案 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。 所有整数类型都是精确的,但并非所有精确类型都是整数。例如,有理和固定指数表示是精确但不是整数。