std:: числовые ограничения:: тихий NaN () против std:: nan () против NAN
Я был удивлен количеством объектов C++, представляющих тихое значение NaN. Я нашел три стандартных способа:--9-->
-
std::numeric_limits<T>::quiet_NaN()
- общая, и я думал, что это был избранный -
std::nan
,std::nanf
,std::nanl
- семейство функций, принимаяconst char*
аргумент -
NAN
- макрос, "который оценивает тихое не-число"
каждого из них были введены в C++11. У меня есть несколько вопросов относительно этого:
- что значит
const char*
аргумент стоять вstd::nan
и co? Как он используется? - Какого черта нам нужно добавить макрос в C++11, в то время как мы уже добавили общий класс признаков для этой цели? (Это для совместимости с C?)
- что я должен использовать по умолчанию? (Я полагаю, это первый)
1 ответов
std::nan
, std::nanl
и std::nanf
наследуются от библиотеки C Math и NAN macro. Они все живут в C <math.h>
. Однако, как предполагает @NicolBolas, они были введены только в C++11, потому что они не были частью ANSI C, а скорее C99, более новой версии стандарта языка C. Комитет по стандартам c++ прилагал усилия для "обновления" совместимости C, так сказать.
std::numeric_limits<T>
был предназначен для самого C++ (задолго до C++11), и это то, что я бы использовал.
Итак, ответ в нижней строке: совместимость C99.