C++ 11提供了兩種類型特徵模板類:std::is_integer
和std::is_integral
。但是,我無法分辨他們之間的差異。std :: is_integer和std :: is_integral之間的區別?
什麼類型,比如T,可以使std::is_integer<T>::value
爲真,並使std::is_integral<T>::value
爲假?
C++ 11提供了兩種類型特徵模板類:std::is_integer
和std::is_integral
。但是,我無法分辨他們之間的差異。std :: is_integer和std :: is_integral之間的區別?
什麼類型,比如T,可以使std::is_integer<T>::value
爲真,並使std::is_integral<T>::value
爲假?
std::is_integer<T>
不存在。
也就是說,std::numeric_limits<T>::is_integer
確實存在。
我不知道std::numeric_limits<T>::is_integer
和std::is_integral<T>
之間有任何顯着差異。後者被設計得很晚,在C++ 11中成爲標準,而前者是在C++ 98中引入的。
沒有類型T
對於std::is_integral<T>::value
和std::numeric_limits<T>::is_integer
有不同的結果。引述draft Standard:
3.9.1基本類型[basic.fundamental]
7種布爾,焦炭,char16_t,char32_t,wchar_t的,和簽名,並 無符號整數類型的統稱整數類型。甲 同義詞積分類型是整數類型。[...]
18.3.2.4 numeric_limits成員[numeric.limits.members]
static constexpr bool is_integer;
17 True如果類型是整數。
20.9.4.1主類型類別[meta.unary.cat](表47)
template <class T> struct is_integral;
T是一個整數類型(3.9.1)
區別在於std::is_integral<T>
只能識別十進制整數,包括bool
char
char16_t
char32_t
wchar_t
short
int
long
long long
。而std::numeric_limits<T>::is_integer
將識別所有這些以及float
double
。看看這兩頁的更多信息:is_integer,is_integral
std::is_integral_v<T>
將只返回真正的內置整數。
該標準允許std::numeric_limits<T>::is_integer
是專用的,並且對於定製整數類型如boost::multiprecion::cpp_int
返回true。
我沒有看到任何問題的答案。 – Raffi