xml*_*lmx 24 c++ type-traits language-lawyer c++11
C++ 11提供了两种类型的特征模板类:std::is_integer
和std::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_integer
和std::is_integral<T>
.后者设计得更晚,在C++ 11中成为标准,而前者在C++ 98中引入.
Tem*_*Rex 14
没有类型T
对std::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
.
归档时间: |
|
查看次数: |
5626 次 |
最近记录: |