2013-02-03 179 views

回答

18

std::is_integer<T>不存在。

也就是說,std::numeric_limits<T>::is_integer確實存在。

我不知道std::numeric_limits<T>::is_integerstd::is_integral<T>之間有任何顯着差異。後者被設計得很晚,在C++ 11中成爲標準,而前者是在C++ 98中引入的。

+1

我沒有看到任何問題的答案。 – Raffi

9

沒有類型T對於std::is_integral<T>::valuestd::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)

1

區別在於std::is_integral<T>只能識別十進制整數,包括boolcharchar16_tchar32_twchar_tshortintlonglong long。而std::numeric_limits<T>::is_integer將識別所有這些以及floatdouble。看看這兩頁的更多信息:is_integeris_integral

0

std::is_integral_v<T>將只返回真正的內置整數。

該標準允許std::numeric_limits<T>::is_integer是專用的,並且對於定製整數類型如boost::multiprecion::cpp_int返回true。

相關問題