std :: is_integer和std :: is_integral之间的区别?

xml*_*lmx 24 c++ type-traits language-lawyer c++11

C++ 11提供了两种类型的特征模板类:std::is_integerstd::is_integral.但是,我不能说出它们之间的区别.

什么类型,比如T,可以成std::is_integer<T>::value真并做出std::is_integral<T>::value错误?

How*_*ant 26

std::is_integer<T> 不存在.

话虽如此,std::numeric_limits<T>::is_integer确实存在.

我不知道之间的任何显著的差异std::numeric_limits<T>::is_integerstd::is_integral<T>.后者设计得更晚,在C++ 11中成为标准,而前者在C++ 98中引入.

  • 我没有看到任何问题的答案. (4认同)

Tem*_*Rex 14

没有类型Tstd::is_integral<T>::value和有不同的结果std::numeric_limits<T>::is_integer.引用标准草案:

3.9.1基本类型[basic.fundamental]

7类型bool,char,char16_t,char32_t,wchar_t以及有符号和无符号整数类型统称为整数类型.整数类型的同义词是整数类型.[...]

18.3.2.4 numeric_limits成员[numeric.limits.members]

static constexpr bool is_integer;
Run Code Online (Sandbox Code Playgroud)

17如果类型是整数,则为True.

20.9.4.1主要类型类别[meta.unary.cat](表47)

template <class T> struct is_integral;
Run Code Online (Sandbox Code Playgroud)

T是一个整数类型(3.9.1)


小智 8

std::is_integral_v<T>只会对内置整数返回 true。

该标准允许std::numeric_limits<T>::is_integer对自定义整数类型进行专门化并返回 true,例如boost::multiprecion::cpp_int.