沒有isnan()
函數在當前的C+標準庫中可用。它是在C99定義為宏不是函數。由C99定義的標準庫元素不屬于當前的C+標準ISO/IEC 14882:1998,也不是其更新的ISO/IEC 14882:2003。
2005年提出了“技術報告1”。TR1與C99和C+兼容。盡管它從未被正式采用成為C+標準,但許多GCC 4.0+或Visual C+9.0+C+實現確實提供了TR1功能,所有這些特性或只有一些特性(VisualC+9.0不提供C99數學函數)。
如果TR1可用,那么cmath
包括C99元素,如isnan()
,?isfinite()
等等,但它們被定義為函數,而不是宏,通常在std::tr1::
命名空間,盡管許多實現(即Linux上的GCC 4+或MacOSX10.5+上的XCode)將它們直接注入到std::
,所以std::isnan
定義得很清楚。
此外,C+的一些實現仍然使C99isnan()
可用于C+的宏(包括cmath
或math.h
),什么會引起更多的混亂,開發人員可能會認為這是一種標準行為。
如上文所述,關于VIZE C+的說明沒有提供std::isnan
兩樣std::tr1::isnan
,但是它提供了一個定義為_isnan()
從那時起就有了Visual C+6.0
在XCode上,還有更多的樂趣。如前所述,GCC 4+定義了std::isnan
..對于較早版本的編譯器和庫表單XCode,似乎(這里是相關討論),還沒有機會檢查我自己)定義了兩個函數,__inline_isnand()
關于英特爾和__isnand()
在電源PC上。